asm { //************************************ CMP_TEMPLATES:: DU32 @@05,@@10,@@15,@@25,@@30, @@35,@@40,@@45,@@55,@@60, @@75,@@80,@@85,@@90,@@95, @@100,@@105,@@110,@@115,@@125, @@135; @@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: MOV EAX,HPET_MAIN_CNT MOV RAX,U64 [RAX] @@90: //Sqr PUSH RAX FLD U64 [RSP] FMUL ST0,ST0 FSTP U64 [RSP] POP RAX @@95: //Abs PUSH RAX FLD U64 [RSP] FABS FSTP U64 [RSP] POP RAX @@100: //Sqrt PUSH RAX FLD U64 [RSP] FSQRT FSTP U64 [RSP] POP RAX @@105: //Sin PUSH RAX FLD U64 [RSP] FSIN FSTP U64 [RSP] POP RAX @@110: //Cos PUSH RAX FLD U64 [RSP] FCOS FSTP U64 [RSP] POP RAX @@115: //Tan PUSH RAX FLD U64 [RSP] @@120: FPTAN FSTSW TEST AX,0x400 JNZ @@120 FFREE ST0 FINCSTP FSTP U64 [RSP] POP RAX @@125: //Atan PUSH RAX FLD U64 [RSP] FLD1 @@130: FPATAN FSTSW TEST AX,0x400 JNZ @@130 FSTP U64 [RSP] POP RAX @@135: //************************************ CMP_TEMPLATES_DONT_POP:: DU32 @@05,@@10,@@15,@@20,@@25, @@30,@@35,@@40,@@45,@@50, @@55,@@60,@@65,@@70,@@75, @@80,@@85,@@90,@@95,@@105, @@115; @@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: @@70: //Sqr PUSH RAX FLD U64 [RSP] FMUL ST0,ST0 ADD RSP,8 @@75: //Abs PUSH RAX FLD U64 [RSP] FABS ADD RSP,8 @@80: //Sqrt PUSH RAX FLD U64 [RSP] FSQRT ADD RSP,8 @@85: //Sin PUSH RAX FLD U64 [RSP] FSIN ADD RSP,8 @@90: //Cos PUSH RAX FLD U64 [RSP] FCOS ADD RSP,8 @@95: //Tan PUSH RAX FLD U64 [RSP] @@100: FPTAN FSTSW TEST AX,0x400 JNZ @@100 FFREE ST0 FINCSTP ADD RSP,8 @@105: //Atan PUSH RAX FLD U64 [RSP] FLD1 @@110: FPATAN FSTSW TEST AX,0x400 JNZ @@110 ADD RSP,8 @@115: //************************************ CMP_TEMPLATES_DONT_PUSH:: DU32 @@05,@@10,@@15,@@20,@@30, @@35,@@40,@@50,@@55,@@60, @@65,@@70,@@75,@@80,@@85, @@90,@@95,@@100,@@105,@@115, @@125; @@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: @@80: //Sqr SUB RSP,8 FMUL ST0,ST0 FSTP U64 [RSP] POP RAX @@85: //Abs SUB RSP,8 FABS FSTP U64 [RSP] POP RAX @@90: //Sqrt SUB RSP,8 FSQRT FSTP U64 [RSP] POP RAX @@95: //Sin SUB RSP,8 FSIN FSTP U64 [RSP] POP RAX @@100: //Cos SUB RSP,8 FCOS FSTP U64 [RSP] POP RAX @@105: //Tan SUB RSP,8 @@110: FPTAN FSTSW TEST AX,0x400 JNZ @@110 FFREE ST0 FINCSTP FSTP U64 [RSP] POP RAX @@115: //Atan SUB RSP,8 FLD1 @@120: FPATAN FSTSW TEST AX,0x400 JNZ @@120 FSTP U64 [RSP] POP RAX @@125: //************************************ 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,@@100, @@110; @@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: @@70: //Sqr FMUL ST0,ST0 @@75: //Abs FABS @@80: //Sqrt FSQRT @@85: //Sin FSIN @@90: //Cos FCOS @@95: //Tan FPTAN FSTSW TEST AX,0x400 JNZ @@95 FFREE ST0 FINCSTP @@100: //Atan FLD1 @@105: FPATAN FSTSW TEST AX,0x400 JNZ @@105 @@110: //************************************ 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, @@115; @@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: @@115: }