fp_amd64.s raw

   1  //go:build amd64 && !purego
   2  // +build amd64,!purego
   3  
   4  #include "textflag.h"
   5  #include "fp_amd64.h"
   6  
   7  // func cmovAmd64(x, y *Elt, n uint)
   8  TEXT ·cmovAmd64(SB),NOSPLIT,$0-24
   9      MOVQ x+0(FP), DI
  10      MOVQ y+8(FP), SI
  11      MOVQ n+16(FP), BX
  12      cselect(0(DI),0(SI),BX)
  13      RET
  14  
  15  // func cswapAmd64(x, y *Elt, n uint)
  16  TEXT ·cswapAmd64(SB),NOSPLIT,$0-24
  17      MOVQ x+0(FP), DI
  18      MOVQ y+8(FP), SI
  19      MOVQ n+16(FP), BX
  20      cswap(0(DI),0(SI),BX)
  21      RET
  22  
  23  // func subAmd64(z, x, y *Elt)
  24  TEXT ·subAmd64(SB),NOSPLIT,$0-24
  25      MOVQ z+0(FP), DI
  26      MOVQ x+8(FP), SI
  27      MOVQ y+16(FP), BX
  28      subtraction(0(DI),0(SI),0(BX))
  29      RET
  30  
  31  // func addsubAmd64(x, y *Elt)
  32  TEXT ·addsubAmd64(SB),NOSPLIT,$0-16
  33      MOVQ x+0(FP), DI
  34      MOVQ y+8(FP), SI
  35      addSub(0(DI),0(SI))
  36      RET
  37  
  38  #define addLegacy \
  39      additionLeg(0(DI),0(SI),0(BX))
  40  #define addBmi2Adx \
  41      additionAdx(0(DI),0(SI),0(BX))
  42  
  43  #define mulLegacy \
  44      integerMulLeg(0(SP),0(SI),0(BX)) \
  45      reduceFromDoubleLeg(0(DI),0(SP))
  46  #define mulBmi2Adx \
  47      integerMulAdx(0(SP),0(SI),0(BX)) \
  48      reduceFromDoubleAdx(0(DI),0(SP))
  49  
  50  #define sqrLegacy \
  51      integerSqrLeg(0(SP),0(SI)) \
  52      reduceFromDoubleLeg(0(DI),0(SP))
  53  #define sqrBmi2Adx \
  54      integerSqrAdx(0(SP),0(SI)) \
  55      reduceFromDoubleAdx(0(DI),0(SP))
  56  
  57  // func addAmd64(z, x, y *Elt)
  58  TEXT ·addAmd64(SB),NOSPLIT,$0-24
  59      MOVQ z+0(FP), DI
  60      MOVQ x+8(FP), SI
  61      MOVQ y+16(FP), BX
  62      CHECK_BMI2ADX(LADD, addLegacy, addBmi2Adx)
  63  
  64  // func mulAmd64(z, x, y *Elt)
  65  TEXT ·mulAmd64(SB),NOSPLIT,$112-24
  66      MOVQ z+0(FP), DI
  67      MOVQ x+8(FP), SI
  68      MOVQ y+16(FP), BX
  69      CHECK_BMI2ADX(LMUL, mulLegacy, mulBmi2Adx)
  70  
  71  // func sqrAmd64(z, x *Elt)
  72  TEXT ·sqrAmd64(SB),NOSPLIT,$112-16
  73      MOVQ z+0(FP), DI
  74      MOVQ x+8(FP), SI
  75      CHECK_BMI2ADX(LSQR, sqrLegacy, sqrBmi2Adx)
  76