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: }