Я уже позаботился о других различных синтаксисах, таких как выравнивание констант и их адресация (все они глобальные). Я старался изо всех сил преобразовать GAS для совместимости с windows. но без удачи мои модульные тесты продолжают давать сбой на windows ... пожалуйста, не предлагайте встроенные функции, я должен контролировать сборку в финальной программе для этой процедуры. спасибо!
eecos:
vmovaps %xmm0, %xmm1 # xmm1 = xmm0
vmovaps one(%rip), %xmm0 # initialize register to 1
vmulps %xmm1, %xmm1, %xmm2 # x^2
vmulps %xmm2, %xmm2, %xmm3 # x^4
vmulps %xmm2, %xmm3, %xmm4 # x^6
vmulps %xmm2, %xmm4, %xmm5 # x^8
vmulps %xmm2, %xmm5, %xmm6 # x^10
vmulps %xmm2, %xmm6, %xmm7 # x^12
vmulps %xmm2, %xmm7, %xmm8 # x^14
vmulps coef2(%rip), %xmm2, %xmm2
vmulps coef4(%rip), %xmm3, %xmm3
vmulps coef6(%rip), %xmm4, %xmm4
vmulps coef8(%rip), %xmm5, %xmm5
vmulps coef10(%rip), %xmm6, %xmm6
vmulps coef12(%rip), %xmm7, %xmm7
vmulps coef14(%rip), %xmm8, %xmm8
vaddps %xmm2, %xmm0, %xmm0
vaddps %xmm3, %xmm0, %xmm0
vaddps %xmm4, %xmm0, %xmm0
vaddps %xmm5, %xmm0, %xmm0
vaddps %xmm6, %xmm0, %xmm0
vaddps %xmm7, %xmm0, %xmm0
vaddps %xmm8, %xmm0, %xmm0
# setup rounding at the hundred thousanth place
# hundred thousanth place should be stable enough for physics
vmulps hunth(%rip), %xmm0, %xmm0
vroundps $8, %xmm0, %xmm0
vmulps invhunth(%rip), %xmm0, %xmm0
ret # return xmm0
что у меня в МАСМ
eecos PROC FRAME
.endprolog
vmovaps xmm1, xmm0 ; xmm1 = xmm0
vmovaps xmm0, XMMWORD PTR one ; initialize register to 1
vmulps xmm2, xmm1, xmm1 ; x^2
vmulps xmm3, xmm2, xmm2 ; x^4
vmulps xmm4, xmm3, xmm2 ; x^6
vmulps xmm5, xmm4, xmm2 ; x^8
vmulps xmm6, xmm5, xmm2 ; x^10
vmulps xmm7, xmm6, xmm2 ; x^12
vmulps xmm8, xmm7, xmm2 ; x^14
vmulps xmm2, xmm2, XMMWORD PTR coef2
vmulps xmm3, xmm3, XMMWORD PTR coef4
vmulps xmm4, xmm4, XMMWORD PTR coef6
vmulps xmm5, xmm5, XMMWORD PTR coef8
vmulps xmm6, xmm6, XMMWORD PTR coef10
vmulps xmm7, xmm7, XMMWORD PTR coef12
vmulps xmm8, xmm8, XMMWORD PTR coef14
vaddps xmm0, xmm0, xmm2
vaddps xmm0, xmm0, xmm3
vaddps xmm0, xmm0, xmm4
vaddps xmm0, xmm0, xmm5
vaddps xmm0, xmm0, xmm6
vaddps xmm0, xmm0, xmm7
vaddps xmm0, xmm0, xmm8
; setup rounding at the hundred thousanth place
; hundred thousanth place should be stable enough for physics
vmulps xmm0, xmm0, XMMWORD PTR hunth
vroundps xmm0, xmm0, 8
vmulps xmm0, xmm0, XMMWORD PTR invhunth
ret ; return xmm0
; cosine subroutine here
eecos ENDP
END
Выходы (сначала ГАЗ) https://paste.ubuntu.com/p/R5vHC6kyfK/ https://paste.ubuntu.com/p/V2NgWmSqDN/