You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
/ / Code g e n e r a t e d b y c o m m a n d : g o r u n f e _ a m d64 _ a s m . g o - o u t . . / f e _ a m d64 . s - s t u b s . . / f e _ a m d64 . g o - p k g f i e l d . D O N O T E D I T .
/ / go : build a m d64 & & g c & & ! p u r e g o
/ / + build a m d64 ,g c ,! p u r e g o
# include " t e x t f l a g . h "
/ / func f e M u l ( o u t * E l e m e n t , a * E l e m e n t , b * E l e m e n t )
TEXT · f e M u l ( S B ) , N O S P L I T , $ 0 - 2 4
MOVQ a + 8 ( F P ) , C X
MOVQ b + 1 6 ( F P ) , B X
/ / r0 = a0 × b0
MOVQ ( C X ) , A X
MULQ ( B X )
MOVQ A X , D I
MOVQ D X , S I
/ / r0 + = 1 9 × a1 × b4
MOVQ 8 ( C X ) , A X
IMUL3 Q $ 0 x13 , A X , A X
MULQ 3 2 ( B X )
ADDQ A X , D I
ADCQ D X , S I
/ / r0 + = 1 9 × a2 × b3
MOVQ 1 6 ( C X ) , A X
IMUL3 Q $ 0 x13 , A X , A X
MULQ 2 4 ( B X )
ADDQ A X , D I
ADCQ D X , S I
/ / r0 + = 1 9 × a3 × b2
MOVQ 2 4 ( C X ) , A X
IMUL3 Q $ 0 x13 , A X , A X
MULQ 1 6 ( B X )
ADDQ A X , D I
ADCQ D X , S I
/ / r0 + = 1 9 × a4 × b1
MOVQ 3 2 ( C X ) , A X
IMUL3 Q $ 0 x13 , A X , A X
MULQ 8 ( B X )
ADDQ A X , D I
ADCQ D X , S I
/ / r1 = a0 × b1
MOVQ ( C X ) , A X
MULQ 8 ( B X )
MOVQ A X , R 9
MOVQ D X , R 8
/ / r1 + = a1 × b0
MOVQ 8 ( C X ) , A X
MULQ ( B X )
ADDQ A X , R 9
ADCQ D X , R 8
/ / r1 + = 1 9 × a2 × b4
MOVQ 1 6 ( C X ) , A X
IMUL3 Q $ 0 x13 , A X , A X
MULQ 3 2 ( B X )
ADDQ A X , R 9
ADCQ D X , R 8
/ / r1 + = 1 9 × a3 × b3
MOVQ 2 4 ( C X ) , A X
IMUL3 Q $ 0 x13 , A X , A X
MULQ 2 4 ( B X )
ADDQ A X , R 9
ADCQ D X , R 8
/ / r1 + = 1 9 × a4 × b2
MOVQ 3 2 ( C X ) , A X
IMUL3 Q $ 0 x13 , A X , A X
MULQ 1 6 ( B X )
ADDQ A X , R 9
ADCQ D X , R 8
/ / r2 = a0 × b2
MOVQ ( C X ) , A X
MULQ 1 6 ( B X )
MOVQ A X , R 1 1
MOVQ D X , R 1 0
/ / r2 + = a1 × b1
MOVQ 8 ( C X ) , A X
MULQ 8 ( B X )
ADDQ A X , R 1 1
ADCQ D X , R 1 0
/ / r2 + = a2 × b0
MOVQ 1 6 ( C X ) , A X
MULQ ( B X )
ADDQ A X , R 1 1
ADCQ D X , R 1 0
/ / r2 + = 1 9 × a3 × b4
MOVQ 2 4 ( C X ) , A X
IMUL3 Q $ 0 x13 , A X , A X
MULQ 3 2 ( B X )
ADDQ A X , R 1 1
ADCQ D X , R 1 0
/ / r2 + = 1 9 × a4 × b3
MOVQ 3 2 ( C X ) , A X
IMUL3 Q $ 0 x13 , A X , A X
MULQ 2 4 ( B X )
ADDQ A X , R 1 1
ADCQ D X , R 1 0
/ / r3 = a0 × b3
MOVQ ( C X ) , A X
MULQ 2 4 ( B X )
MOVQ A X , R 1 3
MOVQ D X , R 1 2
/ / r3 + = a1 × b2
MOVQ 8 ( C X ) , A X
MULQ 1 6 ( B X )
ADDQ A X , R 1 3
ADCQ D X , R 1 2
/ / r3 + = a2 × b1
MOVQ 1 6 ( C X ) , A X
MULQ 8 ( B X )
ADDQ A X , R 1 3
ADCQ D X , R 1 2
/ / r3 + = a3 × b0
MOVQ 2 4 ( C X ) , A X
MULQ ( B X )
ADDQ A X , R 1 3
ADCQ D X , R 1 2
/ / r3 + = 1 9 × a4 × b4
MOVQ 3 2 ( C X ) , A X
IMUL3 Q $ 0 x13 , A X , A X
MULQ 3 2 ( B X )
ADDQ A X , R 1 3
ADCQ D X , R 1 2
/ / r4 = a0 × b4
MOVQ ( C X ) , A X
MULQ 3 2 ( B X )
MOVQ A X , R 1 5
MOVQ D X , R 1 4
/ / r4 + = a1 × b3
MOVQ 8 ( C X ) , A X
MULQ 2 4 ( B X )
ADDQ A X , R 1 5
ADCQ D X , R 1 4
/ / r4 + = a2 × b2
MOVQ 1 6 ( C X ) , A X
MULQ 1 6 ( B X )
ADDQ A X , R 1 5
ADCQ D X , R 1 4
/ / r4 + = a3 × b1
MOVQ 2 4 ( C X ) , A X
MULQ 8 ( B X )
ADDQ A X , R 1 5
ADCQ D X , R 1 4
/ / r4 + = a4 × b0
MOVQ 3 2 ( C X ) , A X
MULQ ( B X )
ADDQ A X , R 1 5
ADCQ D X , R 1 4
/ / First r e d u c t i o n c h a i n
MOVQ $ 0 x00 0 7 f f f f f f f f f f f f , A X
SHLQ $ 0 x0 d , D I , S I
SHLQ $ 0 x0 d , R 9 , R 8
SHLQ $ 0 x0 d , R 1 1 , R 1 0
SHLQ $ 0 x0 d , R 1 3 , R 1 2
SHLQ $ 0 x0 d , R 1 5 , R 1 4
ANDQ A X , D I
IMUL3 Q $ 0 x13 , R 1 4 , R 1 4
ADDQ R 1 4 , D I
ANDQ A X , R 9
ADDQ S I , R 9
ANDQ A X , R 1 1
ADDQ R 8 , R 1 1
ANDQ A X , R 1 3
ADDQ R 1 0 , R 1 3
ANDQ A X , R 1 5
ADDQ R 1 2 , R 1 5
/ / Second r e d u c t i o n c h a i n ( c a r r y P r o p a g a t e )
MOVQ D I , S I
SHRQ $ 0 x33 , S I
MOVQ R 9 , R 8
SHRQ $ 0 x33 , R 8
MOVQ R 1 1 , R 1 0
SHRQ $ 0 x33 , R 1 0
MOVQ R 1 3 , R 1 2
SHRQ $ 0 x33 , R 1 2
MOVQ R 1 5 , R 1 4
SHRQ $ 0 x33 , R 1 4
ANDQ A X , D I
IMUL3 Q $ 0 x13 , R 1 4 , R 1 4
ADDQ R 1 4 , D I
ANDQ A X , R 9
ADDQ S I , R 9
ANDQ A X , R 1 1
ADDQ R 8 , R 1 1
ANDQ A X , R 1 3
ADDQ R 1 0 , R 1 3
ANDQ A X , R 1 5
ADDQ R 1 2 , R 1 5
/ / Store o u t p u t
MOVQ o u t + 0 ( F P ) , A X
MOVQ D I , ( A X )
MOVQ R 9 , 8 ( A X )
MOVQ R 1 1 , 1 6 ( A X )
MOVQ R 1 3 , 2 4 ( A X )
MOVQ R 1 5 , 3 2 ( A X )
RET
/ / func f e S q u a r e ( o u t * E l e m e n t , a * E l e m e n t )
TEXT · f e S q u a r e ( S B ) , N O S P L I T , $ 0 - 1 6
MOVQ a + 8 ( F P ) , C X
/ / r0 = l 0 × l 0
MOVQ ( C X ) , A X
MULQ ( C X )
MOVQ A X , S I
MOVQ D X , B X
/ / r0 + = 3 8 × l 1 × l 4
MOVQ 8 ( C X ) , A X
IMUL3 Q $ 0 x26 , A X , A X
MULQ 3 2 ( C X )
ADDQ A X , S I
ADCQ D X , B X
/ / r0 + = 3 8 × l 2 × l 3
MOVQ 1 6 ( C X ) , A X
IMUL3 Q $ 0 x26 , A X , A X
MULQ 2 4 ( C X )
ADDQ A X , S I
ADCQ D X , B X
/ / r1 = 2 × l 0 × l 1
MOVQ ( C X ) , A X
SHLQ $ 0 x01 , A X
MULQ 8 ( C X )
MOVQ A X , R 8
MOVQ D X , D I
/ / r1 + = 3 8 × l 2 × l 4
MOVQ 1 6 ( C X ) , A X
IMUL3 Q $ 0 x26 , A X , A X
MULQ 3 2 ( C X )
ADDQ A X , R 8
ADCQ D X , D I
/ / r1 + = 1 9 × l 3 × l 3
MOVQ 2 4 ( C X ) , A X
IMUL3 Q $ 0 x13 , A X , A X
MULQ 2 4 ( C X )
ADDQ A X , R 8
ADCQ D X , D I
/ / r2 = 2 × l 0 × l 2
MOVQ ( C X ) , A X
SHLQ $ 0 x01 , A X
MULQ 1 6 ( C X )
MOVQ A X , R 1 0
MOVQ D X , R 9
/ / r2 + = l 1 × l 1
MOVQ 8 ( C X ) , A X
MULQ 8 ( C X )
ADDQ A X , R 1 0
ADCQ D X , R 9
/ / r2 + = 3 8 × l 3 × l 4
MOVQ 2 4 ( C X ) , A X
IMUL3 Q $ 0 x26 , A X , A X
MULQ 3 2 ( C X )
ADDQ A X , R 1 0
ADCQ D X , R 9
/ / r3 = 2 × l 0 × l 3
MOVQ ( C X ) , A X
SHLQ $ 0 x01 , A X
MULQ 2 4 ( C X )
MOVQ A X , R 1 2
MOVQ D X , R 1 1
/ / r3 + = 2 × l 1 × l 2
MOVQ 8 ( C X ) , A X
IMUL3 Q $ 0 x02 , A X , A X
MULQ 1 6 ( C X )
ADDQ A X , R 1 2
ADCQ D X , R 1 1
/ / r3 + = 1 9 × l 4 × l 4
MOVQ 3 2 ( C X ) , A X
IMUL3 Q $ 0 x13 , A X , A X
MULQ 3 2 ( C X )
ADDQ A X , R 1 2
ADCQ D X , R 1 1
/ / r4 = 2 × l 0 × l 4
MOVQ ( C X ) , A X
SHLQ $ 0 x01 , A X
MULQ 3 2 ( C X )
MOVQ A X , R 1 4
MOVQ D X , R 1 3
/ / r4 + = 2 × l 1 × l 3
MOVQ 8 ( C X ) , A X
IMUL3 Q $ 0 x02 , A X , A X
MULQ 2 4 ( C X )
ADDQ A X , R 1 4
ADCQ D X , R 1 3
/ / r4 + = l 2 × l 2
MOVQ 1 6 ( C X ) , A X
MULQ 1 6 ( C X )
ADDQ A X , R 1 4
ADCQ D X , R 1 3
/ / First r e d u c t i o n c h a i n
MOVQ $ 0 x00 0 7 f f f f f f f f f f f f , A X
SHLQ $ 0 x0 d , S I , B X
SHLQ $ 0 x0 d , R 8 , D I
SHLQ $ 0 x0 d , R 1 0 , R 9
SHLQ $ 0 x0 d , R 1 2 , R 1 1
SHLQ $ 0 x0 d , R 1 4 , R 1 3
ANDQ A X , S I
IMUL3 Q $ 0 x13 , R 1 3 , R 1 3
ADDQ R 1 3 , S I
ANDQ A X , R 8
ADDQ B X , R 8
ANDQ A X , R 1 0
ADDQ D I , R 1 0
ANDQ A X , R 1 2
ADDQ R 9 , R 1 2
ANDQ A X , R 1 4
ADDQ R 1 1 , R 1 4
/ / Second r e d u c t i o n c h a i n ( c a r r y P r o p a g a t e )
MOVQ S I , B X
SHRQ $ 0 x33 , B X
MOVQ R 8 , D I
SHRQ $ 0 x33 , D I
MOVQ R 1 0 , R 9
SHRQ $ 0 x33 , R 9
MOVQ R 1 2 , R 1 1
SHRQ $ 0 x33 , R 1 1
MOVQ R 1 4 , R 1 3
SHRQ $ 0 x33 , R 1 3
ANDQ A X , S I
IMUL3 Q $ 0 x13 , R 1 3 , R 1 3
ADDQ R 1 3 , S I
ANDQ A X , R 8
ADDQ B X , R 8
ANDQ A X , R 1 0
ADDQ D I , R 1 0
ANDQ A X , R 1 2
ADDQ R 9 , R 1 2
ANDQ A X , R 1 4
ADDQ R 1 1 , R 1 4
/ / Store o u t p u t
MOVQ o u t + 0 ( F P ) , A X
MOVQ S I , ( A X )
MOVQ R 8 , 8 ( A X )
MOVQ R 1 0 , 1 6 ( A X )
MOVQ R 1 2 , 2 4 ( A X )
MOVQ R 1 4 , 3 2 ( A X )
RET