Explorar el Código

WIP

trials/PERF_try2
Kris Kwiatkowski hace 6 años
padre
commit
543bbcf84c
Se han modificado 2 ficheros con 22 adiciones y 14 borrados
  1. +14
    -7
      p503/arith_amd64.s
  2. +8
    -7
      p503/arith_decl.go

+ 14
- 7
p503/arith_amd64.s Ver fichero

@@ -698,13 +698,20 @@ TEXT ·mulWithMULXADX(SB), NOSPLIT, $104-24
MUL(CX, REG_P2, REG_P1, MULS256_MULXADX)
RET

// TEXT ·fp503Mul(SB), NOSPLIT, $104-24
// // Actual implementation
// MOVQ z+ 0(FP), CX
// MOVQ x+ 8(FP), REG_P2
// MOVQ y+16(FP), REG_P1
// MUL(CX, REG_P2, REG_P1, MULS256_MULXADX)
// RET
TEXT ·fp503Mul(SB), NOSPLIT, $104-24
// Actual implementation
MOVQ z+ 0(FP), CX
MOVQ x+ 8(FP), REG_P2
MOVQ y+16(FP), REG_P1
CMPB ·HasBMI2(SB), $1
JE mulWithMULXADX
JMP mulWithMULX
mulWithMULXADX:
MUL(CX, REG_P2, REG_P1, MULS256_MULXADX)
RET
mulWithMULX:
MUL(CX, REG_P2, REG_P1, MULS256_MULX)
RET

TEXT ·fp503MulXXX(SB), NOSPLIT, $104-72
// Actual implementation


+ 8
- 7
p503/arith_decl.go Ver fichero

@@ -54,13 +54,8 @@ func mulWithMULX(z *FpElementX2, x, y *FpElement)

// Mul implementation for CPUs supporting two independent carry chain
// (ADOX/ADCX) instructions and carry-less MULX multiplier
func fp503Mul(z *FpElementX2, x, y *FpElement) {
if cpu.HasBMI2 {
mulWithMULXADX(z, x, y)
} else {
mul(z, x, y)
}
}
//go:noescape
func fp503Mul(z *FpElementX2, x, y *FpElement)

//go:noescape
func fp503MulXXX(z, x, y []uint64)
@@ -92,6 +87,12 @@ func init() {
fp503Mul1 = fp503MulXXX
}

var HasBMI2 bool

func init() {
HasBMI2 = cpu.HasBMI2
}

/*
func init() {
if cpu.HasBMI2 {


Cargando…
Cancelar
Guardar