asm { _MEMSET:: PUSH RBP MOV RBP,RSP PUSH RDI CLD MOV RDI,U64 SF_ARG1[RBP] MOV RAX,U64 SF_ARG2[RBP] MOV RCX,U64 SF_ARG3[RBP] REP_STOSB MOV RAX,RDI POP RDI POP RBP RET1 24 _MEMSET_U16:: PUSH RBP MOV RBP,RSP PUSH RDI CLD MOV RDI,U64 SF_ARG1[RBP] MOV RAX,U64 SF_ARG2[RBP] MOV RCX,U64 SF_ARG3[RBP] REP_STOSW MOV RAX,RDI POP RDI POP RBP RET1 24 _MEMSET_U32:: PUSH RBP MOV RBP,RSP PUSH RDI CLD MOV RDI,U64 SF_ARG1[RBP] MOV RAX,U64 SF_ARG2[RBP] MOV RCX,U64 SF_ARG3[RBP] REP_STOSD MOV RAX,RDI POP RDI POP RBP RET1 24 _MEMSET_I64:: PUSH RBP MOV RBP,RSP PUSH RDI CLD MOV RDI,U64 SF_ARG1[RBP] MOV RAX,U64 SF_ARG2[RBP] MOV RCX,U64 SF_ARG3[RBP] REP_STOSQ MOV RAX,RDI POP RDI POP RBP RET1 24 _MEMCPY:: PUSH RBP MOV RBP,RSP PUSH RSI PUSH RDI CLD MOV RDI,U64 SF_ARG1[RBP] MOV RSI,U64 SF_ARG2[RBP] MOV RCX,U64 SF_ARG3[RBP] REP_MOVSB MOV RAX,RDI POP RDI POP RSI POP RBP RET1 24 _MEMCPY64:: PUSH RBP MOV RBP,RSP PUSH RSI PUSH RDI CLD MOV RDI,U64 SF_ARG1[RBP] MOV RSI,U64 SF_ARG2[RBP] MOV RCX,U64 SF_ARG3[RBP] REP_MOVSQ MOV RAX,RDI POP RDI POP RSI POP RBP RET1 24 _MEMCMP:: PUSH RBP MOV RBP,RSP PUSH RSI PUSH RDI CLD MOV RSI,U64 SF_ARG1[RBP] MOV RDI,U64 SF_ARG2[RBP] MOV RCX,U64 SF_ARG3[RBP] XOR RAX,RAX REPE_CMPSB JZ @@05 MOV AL,1 JA @@05 MOV RAX,-1 @@05: POP RDI POP RSI POP RBP RET1 24 _BEQU:: PUSH RBP MOV RBP,RSP XOR RAX,RAX MOV RDX,U64 SF_ARG3[RBP] MOV RBX,U64 SF_ARG1[RBP] MOV RCX,U64 SF_ARG2[RBP] TEST RDX,RDX JZ @@5 BTS U64 [RBX],RCX JMP @@10 @@5: BTR U64 [RBX],RCX @@10: ADC AL,0 POP RBP RET1 24 _LBEQU:: PUSH RBP MOV RBP,RSP XOR RAX,RAX MOV RDX,U64 SF_ARG3[RBP] MOV RBX,U64 SF_ARG1[RBP] MOV RCX,U64 SF_ARG2[RBP] TEST RDX,RDX JZ @@5 LOCK BTS U64 [RBX],RCX JMP @@10 @@5: LOCK BTR U64 [RBX],RCX @@10: ADC AL,0 POP RBP RET1 24 _CLAMP_I64:: PUSH RBP MOV RBP,RSP MOV RAX,U64 SF_ARG1[RBP] MOV RCX,U64 SF_ARG2[RBP] MOV RDX,U64 SF_ARG3[RBP] CMP RAX,RCX CMOVL RAX,RCX CMP RAX,RDX CMOVG RAX,RDX POP RBP RET1 24 _CLAMP_U64:: PUSH RBP MOV RBP,RSP MOV RAX,U64 SF_ARG1[RBP] MOV RCX,U64 SF_ARG2[RBP] MOV RDX,U64 SF_ARG3[RBP] CMP RAX,RCX CMOVB RAX,RCX CMP RAX,RDX CMOVA RAX,RDX POP RBP RET1 24 _CALL:: PUSH RBP MOV RBP,RSP MOV RAX,U64 SF_ARG1[RBP] TEST RAX,RAX JZ @@05 CALL RAX @@05: POP RBP RET1 8 _BIT_FIELD_OR_U32:: PUSH RBP MOV RBP,RSP MOV RBX,U64 SF_ARG2[RBP] SHR RBX,3 ADD RBX,U64 SF_ARG1[RBP] MOV RAX,U64 SF_ARG3[RBP] MOV RCX,U64 SF_ARG2[RBP] AND CL,7 SHL RAX,CL OR U64 [RBX],RAX POP RBP RET1 24 _BIT_FIELD_EXT_U32:: PUSH RBP MOV RBP,RSP MOV RBX,U64 SF_ARG2[RBP] MOV RCX,RBX SHR RBX,3 ADD RBX,U64 SF_ARG1[RBP] MOV RDX,U64 [RBX] AND CL,7 SHR RDX,CL MOV RCX,U64 SF_ARG3[RBP] MOV RAX,1 SHL RAX,CL DEC RAX AND RAX,RDX POP RBP RET1 24 _XCHG_I64:: PUSH RBP MOV RBP,RSP MOV RDX,U64 SF_ARG1[RBP] MOV RAX,U64 SF_ARG2[RBP] XCHG U64 [RDX],RAX POP RBP RET1 16 _XCHG_U32:: PUSH RBP MOV RBP,RSP MOV RDX,U64 SF_ARG1[RBP] MOV EAX,U32 SF_ARG2[RBP] XCHG U32 [RDX],EAX POP RBP RET1 16 _XCHG_U16:: PUSH RBP MOV RBP,RSP MOV RDX,U64 SF_ARG1[RBP] MOVZX RAX,U16 SF_ARG2[RBP] XCHG U16 [RDX],AX POP RBP RET1 16 _XCHG_U8:: PUSH RBP MOV RBP,RSP MOV RDX,U64 SF_ARG1[RBP] MOVZX RAX,U8 SF_ARG2[RBP] XCHG U8 [RDX],AL POP RBP RET1 16 _LXCHG_I64:: PUSH RBP MOV RBP,RSP MOV RDX,U64 SF_ARG1[RBP] MOV RAX,U64 SF_ARG2[RBP] LOCK XCHG U64 [RDX],RAX POP RBP RET1 16 _LXCHG_U32:: PUSH RBP MOV RBP,RSP MOV RDX,U64 SF_ARG1[RBP] MOV EAX,U32 SF_ARG2[RBP] LOCK XCHG U32 [RDX],EAX POP RBP RET1 16 _LXCHG_U16:: PUSH RBP MOV RBP,RSP MOV RDX,U64 SF_ARG1[RBP] MOVZX RAX,U16 SF_ARG2[RBP] LOCK XCHG U16 [RDX],AX POP RBP RET1 16 _LXCHG_U8:: PUSH RBP MOV RBP,RSP MOV RDX,U64 SF_ARG1[RBP] MOVZX RAX,U8 SF_ARG2[RBP] LOCK XCHG U8 [RDX],AL POP RBP RET1 16 _REP_IN_U32:: PUSH RBP MOV RBP,RSP PUSH RDI MOV RDI,U64 SF_ARG1[RBP] MOV RDX,U64 SF_ARG3[RBP] MOV RCX,U64 SF_ARG2[RBP] REP_INSD POP RDI POP RBP RET1 24 _REP_IN_U16:: PUSH RBP MOV RBP,RSP PUSH RDI MOV RDI,U64 SF_ARG1[RBP] MOV RDX,U64 SF_ARG3[RBP] MOV RCX,U64 SF_ARG2[RBP] REP_INSW POP RDI POP RBP RET1 24 _REP_IN_U8:: PUSH RBP MOV RBP,RSP PUSH RDI MOV RDI,U64 SF_ARG1[RBP] MOV RDX,U64 SF_ARG3[RBP] MOV RCX,U64 SF_ARG2[RBP] REP_INSB POP RDI POP RBP RET1 24 _REP_OUT_U32:: PUSH RBP MOV RBP,RSP PUSH RSI MOV RSI,U64 SF_ARG1[RBP] MOV RDX,U64 SF_ARG3[RBP] MOV RCX,U64 SF_ARG2[RBP] REP_OUTSD POP RSI POP RBP RET1 24 _REP_OUT_U16:: PUSH RBP MOV RBP,RSP PUSH RSI MOV RSI,U64 SF_ARG1[RBP] MOV RDX,U64 SF_ARG3[RBP] MOV RCX,U64 SF_ARG2[RBP] REP_OUTSW POP RSI POP RBP RET1 24 _REP_OUT_U8:: PUSH RBP MOV RBP,RSP PUSH RSI MOV RSI,U64 SF_ARG1[RBP] MOV RDX,U64 SF_ARG3[RBP] MOV RCX,U64 SF_ARG2[RBP] REP_OUTSB POP RSI POP RBP RET1 24 _CPUID:: PUSH RBP MOV RBP,RSP PUSH RSI MOV RAX,U64 SF_ARG1[RBP] CPUID MOV RSI,U64 SF_ARG2[RBP] MOV U64 [RSI],RAX MOV U64 8[RSI],RBX MOV U64 16[RSI],RCX MOV U64 24[RSI],RDX POP RSI POP RBP RET1 16 _CALL_IND:: //See _LAST_FUN PUSH RBP MOV RBP,RSP PUSH RSI PUSH RDI MOV RDX,U64 SF_ARG1[RBP] MOV RCX,U64 SF_ARG2[RBP] //argc LEA RSI,U64 SF_ARG3[RBP] //argv SHL RCX,3 SUB RSP,RCX MOV RDI,RSP REP_MOVSB TEST RDX,RDX JZ @@05 CALL RDX POP RDI POP RSI POP RBP RET @@05: MOV RCX,U64 SF_ARG2[RBP] //argc SHL RCX,3 ADD RSP,RCX XOR RAX,RAX POP RDI POP RSI POP RBP RET _CALLEXTNUM:: PUSH RBP MOV RBP,RSP PUSH RSI PUSH RDI MOV RDX,U64 SF_ARG1[RBP] MOV RCX,U64 SF_ARG2[RBP] //argc LEA RSI,U64 SF_ARG3[RBP] //argv SHL RCX,3 SUB RSP,RCX MOV RDI,RSP REP_MOVSB MOV RAX,U64 [SYS_EXTERN_TABLE] MOV RAX,U64 [RAX+RDX*8] TEST RAX,RAX JZ @@05 CALL RAX POP RDI POP RSI POP RBP RET @@05: MOV RCX,U64 SF_ARG2[RBP] //argc SHL RCX,3 ADD RSP,RCX POP RDI POP RSI POP RBP RET _CALLEXTSTR:: PUSH RBP MOV RBP,RSP PUSH RSI PUSH RDI MOV RCX,U64 SF_ARG2[RBP] //argc LEA RSI,U64 SF_ARG3[RBP] //argv SHL RCX,3 SUB RSP,RCX MOV RDI,RSP REP_MOVSB MOV RSI,U64 SF_ARG1[RBP] MOV RCX,1 XOR RAX,RAX MOV RDI,U64 FS:CTask.hash_table[RAX] MOV RBX,HTT_FUN|HTT_EXPORT_SYS_SYM CALL SYS_HASH_FIND JZ @@15 TEST U32 CHash.type[RAX],HTT_FUN JZ @@05 MOV RAX,U64 CHashFun.exe_addr[RAX] JMP @@10 @@05: MOV RAX,U64 CHashExport.val[RAX] @@10: TEST RAX,RAX JZ @@15 CALL RAX POP RDI POP RSI POP RBP RET @@15: MOV RCX,U64 SF_ARG2[RBP] //argc SHL RCX,3 ADD RSP,RCX POP RDI POP RSI POP RBP RET SET_GS_BASE:: PUSH RAX PUSH RCX PUSH RDX MOV RDX,RAX SHR RDX,32 MOV ECX,IA32_GS_BASE WRMSR POP RDX POP RCX POP RAX RET SET_FS_BASE:: PUSH RAX PUSH RCX PUSH RDX MOV RDX,RAX SHR RDX,32 MOV ECX,IA32_FS_BASE WRMSR POP RDX POP RCX POP RAX _RET:: RET _SET_MSR:: PUSH RBP MOV RBP,RSP MOV RAX,SF_ARG2[RBP] MOV RDX,RAX SHR RDX,32 MOV RCX,SF_ARG1[RBP] WRMSR POP RBP RET1 16 _SYS_HLT:: CLI @@05: HLT JMP @@05 }