sum_amd64.s raw

   1  // Code generated by command: go run sum_amd64_asm.go -out ../sum_amd64.s -pkg poly1305. DO NOT EDIT.
   2  
   3  //go:build gc && !purego
   4  
   5  // func update(state *macState, msg []byte)
   6  TEXT ·update(SB), $0-32
   7  	MOVQ state+0(FP), DI
   8  	MOVQ msg_base+8(FP), SI
   9  	MOVQ msg_len+16(FP), R15
  10  	MOVQ (DI), R8
  11  	MOVQ 8(DI), R9
  12  	MOVQ 16(DI), R10
  13  	MOVQ 24(DI), R11
  14  	MOVQ 32(DI), R12
  15  	CMPQ R15, $0x10
  16  	JB   bytes_between_0_and_15
  17  
  18  loop:
  19  	ADDQ (SI), R8
  20  	ADCQ 8(SI), R9
  21  	ADCQ $0x01, R10
  22  	LEAQ 16(SI), SI
  23  
  24  multiply:
  25  	MOVQ  R11, AX
  26  	MULQ  R8
  27  	MOVQ  AX, BX
  28  	MOVQ  DX, CX
  29  	MOVQ  R11, AX
  30  	MULQ  R9
  31  	ADDQ  AX, CX
  32  	ADCQ  $0x00, DX
  33  	MOVQ  R11, R13
  34  	IMULQ R10, R13
  35  	ADDQ  DX, R13
  36  	MOVQ  R12, AX
  37  	MULQ  R8
  38  	ADDQ  AX, CX
  39  	ADCQ  $0x00, DX
  40  	MOVQ  DX, R8
  41  	MOVQ  R12, R14
  42  	IMULQ R10, R14
  43  	MOVQ  R12, AX
  44  	MULQ  R9
  45  	ADDQ  AX, R13
  46  	ADCQ  DX, R14
  47  	ADDQ  R8, R13
  48  	ADCQ  $0x00, R14
  49  	MOVQ  BX, R8
  50  	MOVQ  CX, R9
  51  	MOVQ  R13, R10
  52  	ANDQ  $0x03, R10
  53  	MOVQ  R13, BX
  54  	ANDQ  $-4, BX
  55  	ADDQ  BX, R8
  56  	ADCQ  R14, R9
  57  	ADCQ  $0x00, R10
  58  	SHRQ  $0x02, R14, R13
  59  	SHRQ  $0x02, R14
  60  	ADDQ  R13, R8
  61  	ADCQ  R14, R9
  62  	ADCQ  $0x00, R10
  63  	SUBQ  $0x10, R15
  64  	CMPQ  R15, $0x10
  65  	JAE   loop
  66  
  67  bytes_between_0_and_15:
  68  	TESTQ R15, R15
  69  	JZ    done
  70  	MOVQ  $0x00000001, BX
  71  	XORQ  CX, CX
  72  	XORQ  R13, R13
  73  	ADDQ  R15, SI
  74  
  75  flush_buffer:
  76  	SHLQ $0x08, BX, CX
  77  	SHLQ $0x08, BX
  78  	MOVB -1(SI), R13
  79  	XORQ R13, BX
  80  	DECQ SI
  81  	DECQ R15
  82  	JNZ  flush_buffer
  83  	ADDQ BX, R8
  84  	ADCQ CX, R9
  85  	ADCQ $0x00, R10
  86  	MOVQ $0x00000010, R15
  87  	JMP  multiply
  88  
  89  done:
  90  	MOVQ R8, (DI)
  91  	MOVQ R9, 8(DI)
  92  	MOVQ R10, 16(DI)
  93  	RET
  94