Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %macro sincosps 3
- ;{
- ;===================================================================================================.
- ; Name : sincosps (xmm sin, xmm cos, xmm angle_rad) |
- ; Purpose : Compute the sine/cosine of 4 * 32-bit floating-point elements in a expressed |
- ; in radians. |
- ; Input : sin - cos - angle_rad |
- ; Output : sin - cos |
- ; Destoy : None |
- ; Data : Stack |
- %define STACK_PARAM (E128 * 3) ; cos/sin/angle_rad |
- %define STACK_REG (E128 * 1) ; xmm0/xmm1 |
- %define STACK_SIZE (STACK_PARAM + STACK_REG) ;|
- ; ;|
- %define COS (rsp - STACK_SIZE) + (E128 * 0) ;|
- %define SIN (rsp - STACK_SIZE) + (E128 * 1) ;|
- %define ANGLE_RAD (rsp - STACK_SIZE) + (E128 * 2) ;|
- ; ;|
- %define REG1 (rsp - STACK_SIZE) + STACK_PARAM + (E128 * 0) ;|
- ;===================================================================================================.
- ;{
- ; Store function's param in stack
- vmovups [ANGLE_RAD], %3
- ; Store function's reg in stack
- vmovups [REG1], xmm0
- ; Store function's param in function's reg
- vmovups xmm0, [ANGLE_RAD]
- ; Function's core
- ; Change angle degree to radian
- vmulps xmm0, xmm0, [pi_180]
- vmovups [ANGLE_RAD], xmm0
- fld i32 [ANGLE_RAD + _1ps]
- fsincos
- fstp i32 [COS + _1ps]
- fstp i32 [SIN + _1ps]
- fld i32 [ANGLE_RAD + _2ps]
- fsincos
- fstp i32 [COS + _2ps]
- fstp i32 [SIN + _2ps]
- fld i32 [ANGLE_RAD + _3ps]
- fsincos
- fstp i32 [COS + _3ps]
- fstp i32 [SIN + _3ps]
- fld i32 [ANGLE_RAD + _4ps]
- fsincos
- fstp i32 [COS + _4ps]
- fstp i32 [SIN + _4ps]
- ;{
- %ifidni %1, xmm0
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm1
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm2
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm3
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm4
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm5
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm6
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm7
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm8
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm9
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm10
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm11
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm12
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm13
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm14
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm15
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm16
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm17
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm18
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm19
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm20
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm21
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm22
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm23
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm24
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm25
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm26
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm27
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm28
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm29
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm30
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- %elifidni %1, xmm31
- _{vmovups %1, [COS]}, {vmovups xmm0, [REG1]}
- ;}
- %else
- ;{
- vmovups xmm0, [COS]
- vmovups %1, xmm0
- ; Retore function's reg from stack
- vmovups xmm0, [REG1]
- ;}
- %endif
- ;{
- %ifidni %2, xmm0
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm1
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm2
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm3
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm4
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm5
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm6
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm7
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm8
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm9
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm10
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm11
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm12
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm13
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm14
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm15
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm16
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm17
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm18
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm19
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm20
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm21
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm22
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm23
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm24
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm25
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm26
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm27
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm28
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm29
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm30
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- %elifidni %2, xmm31
- _{vmovups %2, [SIN]}, {vmovups xmm0, [REG1]}
- ;}
- %else
- ;{
- vmovups xmm0, [SIN]
- vmovups %1, xmm0
- ; Retore function's reg from stack
- vmovups xmm0, [REG1]
- ;}
- %endif
- ;}
- ;===================================================================================================.
- ; / sincosps |
- ;===================================================================================================.
- ;}
- %endmacro
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement