asm { //************************************ CMP_TEMPLATES:: DU32 @@05, @@10, @@15, @@25, @@30, @@35, @@40, @@45, @@55, @@60, @@75, @@80, @@85, @@90, @@95, @@100, @@105, @@110, @@120, @@130; @@05: //INC PUSH RAX FLD1 FADD ST0, U64 [RSP] FSTP U64 [RSP] POP RAX @@10: //DEC PUSH RAX FLD1 FSUBR ST0, U64 [RSP] FSTP U64 [RSP] POP RAX @@15: //MOD PUSH RDX PUSH RAX MOV RBX, RSP FLD U64 [RBX] FLD U64 8[RBX] @@20: FPREM FSTSW TEST AX, 0x400 JNZ @@20 FSTP U64 [RBX] FFREE ST0 FINCSTP POP RAX ADD RSP, 8 @@25: //LESS PUSH RDX PUSH RAX FLD U64 [RSP] FLD U64 8[RSP] FCOMIP ST0, ST1 MOV RAX, 0 ADC RAX, 0 FFREE ST0 FINCSTP ADD RSP, 16 @@30: //GREATER PUSH RDX PUSH RAX FLD U64 8[RSP] FLD U64 [RSP] FCOMIP ST0, ST1 MOV RAX, 0 ADC RAX, 0 FFREE ST0 FINCSTP ADD RSP, 16 @@35: //LESS_EQU PUSH RDX PUSH RAX FLD U64 8[RSP] FLD U64 [RSP] FCOMIP ST0, ST1 MOV RAX, 1 SBB RAX, 0 FFREE ST0 FINCSTP ADD RSP, 16 @@40: //GREATER_EQU PUSH RDX PUSH RAX FLD U64 [RSP] FLD U64 8[RSP] FCOMIP ST0, ST1 MOV RAX, 1 SBB RAX, 0 FFREE ST0 FINCSTP ADD RSP, 16 @@45: //StrLen MOV RDX,RAX @@50: MOV BL, U8 [RAX] INC RAX TEST BL, BL JNZ @@50 SUB RAX, RDX DEC RAX @@55: //RDTSC RDTSC SHL RDX, 32 ADD RAX, RDX @@60: //SignI64 TEST RAX, RAX JZ @@70 JS @@65 MOV RAX, 1 JMP @@70 @@65: MOV RAX, -1 @@70: @@75: @@80: @@85: //Sqr PUSH RAX FLD U64 [RSP] FMUL ST0, ST0 FSTP U64 [RSP] POP RAX @@90: //Abs PUSH RAX FLD U64 [RSP] FABS FSTP U64 [RSP] POP RAX @@95: //Sqrt PUSH RAX FLD U64 [RSP] FSQRT FSTP U64 [RSP] POP RAX @@100: //Sin PUSH RAX FLD U64 [RSP] FSIN FSTP U64 [RSP] POP RAX @@105: //Cos PUSH RAX FLD U64 [RSP] FCOS FSTP U64 [RSP] POP RAX @@110: //Tan PUSH RAX FLD U64 [RSP] @@115: FPTAN FSTSW TEST AX, 0x400 JNZ @@115 FFREE ST0 FINCSTP FSTP U64 [RSP] POP RAX @@120: //Atan PUSH RAX FLD U64 [RSP] FLD1 @@125: FPATAN FSTSW TEST AX, 0x400 JNZ @@125 FSTP U64 [RSP] POP RAX @@130: //************************************ CMP_TEMPLATES_DONT_POP:: DU32 @@05, @@10, @@15, @@20, @@25, @@30, @@35, @@40, @@45, @@50, @@55, @@60, @@65, @@70, @@75, @@80, @@85, @@90, @@100, @@110; @@05: //INC PUSH RAX FLD1 FADD ST0, U64 [RSP] FST U64 [RSP] POP RAX @@10: //DEC PUSH RAX FLD1 FSUBR ST0, U64 [RSP] FST U64 [RSP] POP RAX @@15: @@20: @@25: @@30: @@35: @@40: @@45: @@50: @@55: @@60: PUSH RAX FLD U64 [RSP] ADD RSP, 8 @@65: //Sqr PUSH RAX FLD U64 [RSP] FMUL ST0, ST0 ADD RSP, 8 @@70: //Abs PUSH RAX FLD U64 [RSP] FABS ADD RSP, 8 @@75: //Sqrt PUSH RAX FLD U64 [RSP] FSQRT ADD RSP, 8 @@80: //Sin PUSH RAX FLD U64 [RSP] FSIN ADD RSP, 8 @@85: //Cos PUSH RAX FLD U64 [RSP] FCOS ADD RSP, 8 @@90: //Tan PUSH RAX FLD U64 [RSP] @@95: FPTAN FSTSW TEST AX, 0x400 JNZ @@95 FFREE ST0 FINCSTP ADD RSP, 8 @@100: //Atan PUSH RAX FLD U64 [RSP] FLD1 @@105: FPATAN FSTSW TEST AX, 0x400 JNZ @@105 ADD RSP, 8 @@110: //************************************ CMP_TEMPLATES_DONT_PUSH:: DU32 @@05, @@10, @@15, @@20, @@30, @@35, @@40, @@50, @@55, @@60, @@65, @@70, @@75, @@80, @@85, @@90, @@95, @@100, @@110, @@120; @@05: //INC SUB RSP, 8 FLD1 FADDP ST1, ST0 FSTP U64 [RSP] POP RAX @@10: //DEC SUB RSP, 8 FLD1 FSUBP ST1, ST0 FSTP U64 [RSP] POP RAX @@15: @@20: //LESS PUSH RAX FLD U64 [RSP] FCOMIP ST0, ST1 MOV RAX, 0 JZ @@25 MOV RAX, 1 SBB RAX, 0 @@25: FFREE ST0 FINCSTP ADD RSP, 8 @@30: //GREATER PUSH RAX FLD U64 [RSP] FCOMIP ST0, ST1 MOV RAX, 0 ADC RAX, 0 FFREE ST0 FINCSTP ADD RSP, 8 @@35: //LESS_EQU PUSH RAX FLD U64 [RSP] FCOMIP ST0, ST1 MOV RAX, 1 SBB RAX, 0 FFREE ST0 FINCSTP ADD RSP, 8 @@40: //GREATER_EQU PUSH RAX FLD U64 [RSP] FCOMIP ST0, ST1 MOV RAX, 1 JZ @@45 MOV RAX, 0 ADC RAX, 0 @@45: FFREE ST0 FINCSTP ADD RSP, 8 @@50: @@55: @@60: @@65: //FSTP SUB RSP, 8 FSTP U64 [RSP] POP RAX @@70: @@75: //Sqr SUB RSP, 8 FMUL ST0, ST0 FSTP U64 [RSP] POP RAX @@80: //Abs SUB RSP, 8 FABS FSTP U64 [RSP] POP RAX @@85: //Sqrt SUB RSP, 8 FSQRT FSTP U64 [RSP] POP RAX @@90: //Sin SUB RSP, 8 FSIN FSTP U64 [RSP] POP RAX @@95: //Cos SUB RSP, 8 FCOS FSTP U64 [RSP] POP RAX @@100: //Tan SUB RSP, 8 @@105: FPTAN FSTSW TEST AX, 0x400 JNZ @@105 FFREE ST0 FINCSTP FSTP U64 [RSP] POP RAX @@110: //Atan SUB RSP, 8 FLD1 @@115: FPATAN FSTSW TEST AX, 0x400 JNZ @@115 FSTP U64 [RSP] POP RAX @@120: //************************************ CMP_TEMPLATES_DONT_PUSH_POP:: DU32 @@05, @@10, @@15, @@20, @@25, @@30, @@35, @@40, @@45, @@50, @@55, @@60, @@65, @@70, @@75, @@80, @@85, @@90, @@95, @@105; @@05: //INC SUB RSP, 8 FLD1 FADDP ST1, ST0 FST U64 [RSP] POP RAX @@10: //DEC SUB RSP, 8 FLD1 FSUBP ST1, ST0 FST U64 [RSP] POP RAX @@15: @@20: @@25: @@30: @@35: @@40: @@45: @@50: @@55: @@60: @@65: //Sqr FMUL ST0, ST0 @@70: //Abs FABS @@75: //Sqrt FSQRT @@80: //Sin FSIN @@85: //Cos FCOS @@90: //Tan FPTAN FSTSW TEST AX, 0x400 JNZ @@90 FFREE ST0 FINCSTP @@95: //Atan FLD1 @@100: FPATAN FSTSW TEST AX, 0x400 JNZ @@100 @@105: //************************************ CMP_TEMPLATES_DONT_PUSH2:: DU32 @@05, @@10, @@15, @@20, @@25, @@35, @@45, @@50, @@55, @@60, @@65, @@70, @@75, @@80, @@85, @@90, @@95, @@100, @@105, @@110; @@05: @@10: @@15: @@20: //LESS PUSH RAX FLD U64 [RSP] FCOMIP ST0, ST1 MOV RAX, 0 ADC RAX, 0 FFREE ST0 FINCSTP ADD RSP, 8 @@25: //GREATER PUSH RAX FLD U64 [RSP] FCOMIP ST0, ST1 MOV RAX, 0 JZ @@30 MOV RAX, 1 SBB RAX, 0 @@30: FFREE ST0 FINCSTP ADD RSP, 8 @@35: //LESS_EQU PUSH RAX FLD U64 [RSP] FCOMIP ST0, ST1 MOV RAX, 1 JZ @@40 MOV RAX, 0 ADC RAX, 0 @@40: FFREE ST0 FINCSTP ADD RSP, 8 @@45: //GREATER_EQU PUSH RAX FLD U64 [RSP] FCOMIP ST0, ST1 MOV RAX, 1 SBB RAX, 0 FFREE ST0 FINCSTP ADD RSP, 8 @@50: @@55: @@60: @@65: @@70: @@75: @@80: @@85: @@90: @@95: @@100: @@105: @@110: }