LTCD_070816.ISO
This commit is contained in:
1 parent
d14bbc24f9
commit
0e9364ff4c
506 files changed
+157705
-41812
No files matched your search
@@ -0,0 +1,884 @@
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_CALL::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
MOV RAX,U8 SF_PARAM1[RBP]
|
||||
OR RAX,RAX
|
||||
JZ @@100
|
||||
CALL RAX
|
||||
@@100: POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
OR_U4_BIT_FIELD::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
MOV RBX,U8 SF_PARAM2[RBP]
|
||||
SHR RBX,3
|
||||
ADD RBX,U8 SF_PARAM1[RBP]
|
||||
MOV RAX,U8 SF_PARAM3[RBP]
|
||||
MOV RCX,U8 SF_PARAM2[RBP]
|
||||
AND RCX,7
|
||||
SHL RAX,CL
|
||||
OR U8 [RBX],RAX
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
SYS_EBF_MASKTABLE:
|
||||
DU8 0,1,3,7,15,31,63,127,255;
|
||||
DU8 0x1FF,0x3FF,0x7FF,0x0FFF;
|
||||
DU8 0x1FFF,0x3FFF,0x7FFF,0x0FFFF;
|
||||
DU8 0x1FFFF,0x3FFFF,0x7FFFF,0xFFFFF;
|
||||
DU8 0x1FFFFF,0x3FFFFF,0x7FFFFF,0xFFFFFF;
|
||||
DU8 0x1FFFFFF,0x3FFFFFF,0x7FFFFFF,0xFFFFFFF;
|
||||
DU8 0x1FFFFFFF,0x3FFFFFFF,0x7FFFFFFF,0xFFFFFFFF;
|
||||
|
||||
EXTRACT_U4_BIT_FIELD::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
MOV RBX,U8 SF_PARAM2[RBP]
|
||||
MOV CL,3
|
||||
SHR RBX,3
|
||||
ADD RBX,U8 SF_PARAM1[RBP]
|
||||
MOV RAX,U8 [RBX]
|
||||
MOV RCX,U8 SF_PARAM2[RBP]
|
||||
AND RCX,7
|
||||
SHR RAX,CL
|
||||
MOV RBX,U8 SF_PARAM3[RBP]
|
||||
AND RAX,U8 SYS_EBF_MASKTABLE[RBX*8]
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
// IN: RSI=STRUCT TO INSERT
|
||||
// RDI=PREDECESSOR
|
||||
ALIGN 8,OC_NOP
|
||||
INSQUE::
|
||||
PUSH RBX
|
||||
MOV RBX,U8 [RDI]
|
||||
MOV U8 [RDI],RSI
|
||||
MOV U8 [RSI],RBX
|
||||
MOV U8 8[RSI],RDI
|
||||
MOV U8 8[RBX],RSI
|
||||
POP RBX
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
// IN: RSI=STRUCT TO INSERT
|
||||
// RDI=SUCCESSOR
|
||||
ALIGN 8,OC_NOP
|
||||
INSQUE_REV::
|
||||
PUSH RBX
|
||||
MOV RBX,U8 8[RDI]
|
||||
MOV U8 [RBX],RSI
|
||||
MOV U8 [RSI],RDI
|
||||
MOV U8 8[RSI],RBX
|
||||
MOV U8 8[RDI],RSI
|
||||
POP RBX
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
// IN: RSI=STRUCT TO REMOVE
|
||||
ALIGN 8,OC_NOP
|
||||
REMQUE::
|
||||
PUSH RBX
|
||||
PUSH RDI
|
||||
MOV RBX,U8 [RSI]
|
||||
MOV RDI,U8 8[RSI]
|
||||
MOV U8 [RDI],RBX
|
||||
MOV U8 8[RBX],RDI
|
||||
POP RDI
|
||||
POP RBX
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_REP_INSW::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
PUSH RDI
|
||||
MOV RDI,U8 SF_PARAM1[RBP]
|
||||
MOV RDX,U8 SF_PARAM3[RBP]
|
||||
MOV RCX,U8 SF_PARAM2[RBP]
|
||||
REP_INSW
|
||||
POP RDI
|
||||
POP RBP
|
||||
RET
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
CP_REP_INSB::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
PUSH RDI
|
||||
MOV RDI,U8 SF_PARAM1[RBP]
|
||||
MOV RDX,U8 SF_PARAM3[RBP]
|
||||
MOV RCX,U8 SF_PARAM2[RBP]
|
||||
REP_INSB
|
||||
POP RDI
|
||||
POP RBP
|
||||
RET
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
CP_REP_OUTSW::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
PUSH RSI
|
||||
MOV RSI,U8 SF_PARAM1[RBP]
|
||||
MOV RDX,U8 SF_PARAM3[RBP]
|
||||
MOV RCX,U8 SF_PARAM2[RBP]
|
||||
REP_OUTSW
|
||||
POP RSI
|
||||
POP RBP
|
||||
RET
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
CP_REP_OUTSB::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
PUSH RSI
|
||||
MOV RSI,U8 SF_PARAM1[RBP]
|
||||
MOV RDX,U8 SF_PARAM3[RBP]
|
||||
MOV RCX,U8 SF_PARAM2[RBP]
|
||||
REP_OUTSB
|
||||
POP RSI
|
||||
POP RBP
|
||||
RET
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
CP_HLT::
|
||||
HLT
|
||||
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_FSQRT::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FSQRT
|
||||
FSTP U8 SF_PARAM1[RBP]
|
||||
FWAIT
|
||||
MOV RAX,U8 SF_PARAM1[RBP]
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_FSIN::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FSIN
|
||||
FSTP U8 SF_PARAM1[RBP]
|
||||
FWAIT
|
||||
MOV RAX,U8 SF_PARAM1[RBP]
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_FCOS::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FCOS
|
||||
FSTP U8 SF_PARAM1[RBP]
|
||||
FWAIT
|
||||
MOV RAX,U8 SF_PARAM1[RBP]
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_FTAN::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
@@1: FPTAN
|
||||
FSTSW
|
||||
FWAIT
|
||||
TEST AX,0x400
|
||||
JNZ @@1
|
||||
FFREE
|
||||
FINCSTP
|
||||
FSTP U8 SF_PARAM1[RBP]
|
||||
FWAIT
|
||||
MOV RAX,U8 SF_PARAM1[RBP]
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_FATAN::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FLD1
|
||||
@@1: FPATAN
|
||||
FSTSW
|
||||
FWAIT
|
||||
TEST AX,0x400
|
||||
JNZ @@1
|
||||
FSTP U8 SF_PARAM1[RBP]
|
||||
FWAIT
|
||||
MOV RAX,U8 SF_PARAM1[RBP]
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_ARG::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
FLD U8 SF_PARAM2[RBP]
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
@@1: FPATAN
|
||||
FSTSW
|
||||
FWAIT
|
||||
TEST AX,0x400
|
||||
JNZ @@1
|
||||
FSTP U8 SF_PARAM1[RBP]
|
||||
FWAIT
|
||||
MOV RAX,U8 SF_PARAM1[RBP]
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_ROUND::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
|
||||
SUB RSP,8
|
||||
FSTCW U4 -8[RBP]
|
||||
FWAIT
|
||||
MOV AX,U2 -8[RBP]
|
||||
MOV U2 -6[RBP],AX
|
||||
AND AX,~0x0C00
|
||||
MOV U2 -8[RBP],AX
|
||||
FLDCW U4 -8[RBP]
|
||||
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FRNDINT
|
||||
FSTP U8 SF_PARAM1[RBP]
|
||||
FWAIT
|
||||
MOV RAX,U8 SF_PARAM1[RBP]
|
||||
|
||||
FLDCW U4 -6[RBP]
|
||||
FWAIT
|
||||
ADD RSP,8
|
||||
|
||||
POP RBP
|
||||
RET
|
||||
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_TRUNC::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
|
||||
SUB RSP,8
|
||||
FSTCW U4 -8[RBP]
|
||||
FWAIT
|
||||
MOV AX,U2 -8[RBP]
|
||||
MOV U2 -6[RBP],AX
|
||||
OR AX,0x0C00
|
||||
MOV U2 -8[RBP],AX
|
||||
FLDCW U4 -8[RBP]
|
||||
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FRNDINT
|
||||
FSTP U8 SF_PARAM1[RBP]
|
||||
FWAIT
|
||||
MOV RAX,U8 SF_PARAM1[RBP]
|
||||
|
||||
FLDCW U4 -6[RBP]
|
||||
FWAIT
|
||||
ADD RSP,8
|
||||
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_FLOOR::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
|
||||
SUB RSP,8
|
||||
FSTCW U4 -8[RBP]
|
||||
FWAIT
|
||||
MOV AX,U2 -8[RBP]
|
||||
MOV U2 -6[RBP],AX
|
||||
AND AX,~0x0C00
|
||||
OR AX,0x0400
|
||||
MOV U2 -8[RBP],AX
|
||||
FLDCW U4 -8[RBP]
|
||||
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FRNDINT
|
||||
FSTP U8 SF_PARAM1[RBP]
|
||||
FWAIT
|
||||
MOV RAX,U8 SF_PARAM1[RBP]
|
||||
|
||||
FLDCW U4 -6[RBP]
|
||||
FWAIT
|
||||
ADD RSP,8
|
||||
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_CEILING::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
|
||||
SUB RSP,8
|
||||
FSTCW U4 -8[RBP]
|
||||
FWAIT
|
||||
MOV AX,U2 -8[RBP]
|
||||
MOV U2 -6[RBP],AX
|
||||
AND AX,~0x0C00
|
||||
OR AX,0x0800
|
||||
MOV U2 -8[RBP],AX
|
||||
FLDCW U4 -8[RBP]
|
||||
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FRNDINT
|
||||
FSTP U8 SF_PARAM1[RBP]
|
||||
FWAIT
|
||||
MOV RAX,SF_PARAM1[RBP]
|
||||
|
||||
FLDCW U4 -6[RBP]
|
||||
FWAIT
|
||||
ADD RSP,8
|
||||
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_POW10::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
SUB RSP,16
|
||||
FSTCW U4 -8[RBP]
|
||||
FWAIT
|
||||
MOV AX,U2 -8[RBP]
|
||||
MOV U2 -6[RBP],AX
|
||||
OR AX,0x0C00
|
||||
MOV U2 -8[RBP],AX
|
||||
FLDCW U4 -8[RBP]
|
||||
|
||||
FLDL2T
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FMULP
|
||||
FST U8 SF_PARAM1[RBP]
|
||||
FRNDINT
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FSUBRP
|
||||
F2XM1
|
||||
FLD1
|
||||
FADDP
|
||||
FSTP U8 -16[RBP]
|
||||
FFREE
|
||||
FINCSTP
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FLD U8 -16[RBP]
|
||||
FSCALE // ST0<<ST1
|
||||
FSTP U8 -16[RBP]
|
||||
FFREE
|
||||
FINCSTP
|
||||
|
||||
FLDCW U4 -6[RBP]
|
||||
FWAIT
|
||||
POP RAX
|
||||
ADD RSP,8
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_EXP::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
SUB RSP,16
|
||||
FSTCW U4 -8[RBP]
|
||||
FWAIT
|
||||
MOV AX,U2 -8[RBP]
|
||||
MOV U2 -6[RBP],AX
|
||||
OR AX,0x0C00
|
||||
MOV U2 -8[RBP],AX
|
||||
FLDCW U4 -8[RBP]
|
||||
|
||||
FLDL2E
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FMULP
|
||||
FST U8 SF_PARAM1[RBP]
|
||||
FRNDINT
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FSUBRP
|
||||
F2XM1
|
||||
FLD1
|
||||
FADDP
|
||||
FSTP U8 -16[RBP]
|
||||
FFREE
|
||||
FINCSTP
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FLD U8 -16[RBP]
|
||||
FSCALE // ST0<<ST1
|
||||
FSTP U8 -16[RBP]
|
||||
FFREE
|
||||
FINCSTP
|
||||
|
||||
FLDCW U4 -6[RBP]
|
||||
FWAIT
|
||||
|
||||
POP RAX
|
||||
ADD RSP,8
|
||||
POP RBP
|
||||
RET
|
||||
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_LOG10::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
SUB RSP,8
|
||||
FLDLG2
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FYL2X // y*log2(x)
|
||||
FSTP U8 -8[RBP]
|
||||
FFREE
|
||||
FINCSTP
|
||||
FWAIT
|
||||
POP RAX
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_LOG2::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
SUB RSP,8
|
||||
FLD1
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FYL2X // y*log2(x)
|
||||
FSTP U8 -8[RBP]
|
||||
FFREE
|
||||
FINCSTP
|
||||
FWAIT
|
||||
POP RAX
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_LN::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
SUB RSP,8
|
||||
FLDLN2
|
||||
FLD U8 SF_PARAM1[RBP]
|
||||
FYL2X // y*log2(x)
|
||||
FSTP U8 -8[RBP]
|
||||
FFREE
|
||||
FINCSTP
|
||||
FWAIT
|
||||
POP RAX
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_FLDCW::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
FLDCW U4 SF_PARAM1[RBP]
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_FSTCW::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
SUB RSP,8
|
||||
FSTCW U4 -8[RBP]
|
||||
MOVZX RAX,U2 -8[RBP]
|
||||
ADD RSP,8
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_FSTSW::
|
||||
XOR EAX,EAX
|
||||
FSTSW
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_FCLEX::
|
||||
FCLEX
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_CLFLUSH::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
MOV RAX,U8 SF_PARAM1[RBP]
|
||||
CLFLUSH U1 [RAX]
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_CPUID::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
PUSH RSI
|
||||
MOV RAX,U8 SF_PARAM1[RBP]
|
||||
CPUID
|
||||
MOV RSI,U8 SF_PARAM2[RBP]
|
||||
MOV U8 [RSI],RAX
|
||||
MOV U8 8[RSI],RBX
|
||||
MOV U8 16[RSI],RCX
|
||||
MOV U8 24[RSI],RDX
|
||||
POP RSI
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_GETCR0::
|
||||
XOR EAX,EAX
|
||||
// MOV EAX,CR0
|
||||
DU1 0x0F,0x20,0xC0;
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_SETCR0::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
MOV RAX,U8 SF_PARAM1[RBP]
|
||||
// MOV CR0,EAX
|
||||
DU1 0x0F,0x22,0xC0;
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_LTR::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
LTR U4 SF_PARAM1[RBP]
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_GETCR3::
|
||||
XOR EAX,EAX
|
||||
// MOV EAX,CR3
|
||||
DU1 0x0F,0x20,0xD8;
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_SETCR3::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
MOV RAX,U8 SF_PARAM1[RBP]
|
||||
//dbgo precede with REX
|
||||
// MOV CR3,EAX
|
||||
DU1 0x0F,0x22,0xD8;
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_GETCR4::
|
||||
XOR EAX,EAX
|
||||
// MOV EAX,CR4
|
||||
DU1 0x0F,0x20,0xE0;
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_SETCR4::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
MOV RAX,U8 SF_PARAM1[RBP]
|
||||
// MOV CR4,EAX
|
||||
DU1 0x0F,0x22,0xE0;
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_INDCALL::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
PUSH RSI
|
||||
PUSH RDI
|
||||
MOV RDX,U8 SF_PARAM1[RBP]
|
||||
MOV RCX,U8 SF_PARAM2[RBP] //argc
|
||||
LEA RSI,U8 SF_PARAM3[RBP] //argv
|
||||
SHL RCX,3
|
||||
SUB RSP,RCX
|
||||
MOV RDI,RSP
|
||||
REP_MOVSB
|
||||
@@10: OR RDX,RDX
|
||||
JZ @@100
|
||||
CALL RDX
|
||||
@@20: MOV RCX,U8 SF_PARAM2[RBP] //argc
|
||||
SHL RCX,3
|
||||
ADD RSP,RCX
|
||||
POP RDI
|
||||
POP RSI
|
||||
POP RBP
|
||||
RET
|
||||
|
||||
@@100: XOR EAX,EAX
|
||||
MOV RCX,U8 SF_PARAM2[RBP] //argc
|
||||
SHL RCX,3
|
||||
ADD RSP,RCX
|
||||
POP RDI
|
||||
POP RSI
|
||||
POP RBP
|
||||
RET
|
||||
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_CALLEXTNUM::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
PUSH RSI
|
||||
PUSH RDI
|
||||
MOV RDX,U8 SF_PARAM1[RBP]
|
||||
MOV RCX,U8 SF_PARAM2[RBP] //argc
|
||||
LEA RSI,U8 SF_PARAM3[RBP] //argv
|
||||
SHL RCX,3
|
||||
SUB RSP,RCX
|
||||
MOV RDI,RSP
|
||||
REP_MOVSB
|
||||
@@10: MOV RAX,U8 [SYS_EXTERN_TABLE]
|
||||
MOV RAX,U8 [RAX+RDX*8]
|
||||
OR RAX,RAX
|
||||
JZ @@100
|
||||
CALL RAX
|
||||
@@20: MOV RCX,U8 SF_PARAM2[RBP] //argc
|
||||
SHL RCX,3
|
||||
ADD RSP,RCX
|
||||
POP RDI
|
||||
POP RSI
|
||||
POP RBP
|
||||
RET
|
||||
|
||||
@@100: XOR EAX,EAX
|
||||
MOV RCX,U8 SF_PARAM2[RBP] //argc
|
||||
SHL RCX,3
|
||||
ADD RSP,RCX
|
||||
POP RDI
|
||||
POP RSI
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_CALLEXTSTR::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
PUSH RSI
|
||||
PUSH RDI
|
||||
MOV RCX,U8 SF_PARAM2[RBP] //argc
|
||||
LEA RSI,U8 SF_PARAM3[RBP] //argv
|
||||
SHL RCX,3
|
||||
SUB RSP,RCX
|
||||
MOV RDI,RSP
|
||||
REP_MOVSB
|
||||
@@10: MOV RSI,U8 SF_PARAM1[RBP]
|
||||
CALL FIND_EXTERN
|
||||
OR RSI,RSI
|
||||
JZ @@100
|
||||
CALL RSI
|
||||
@@20: MOV RCX,U8 SF_PARAM2[RBP] //argc
|
||||
SHL RCX,3
|
||||
ADD RSP,RCX
|
||||
POP RDI
|
||||
POP RSI
|
||||
POP RBP
|
||||
RET
|
||||
|
||||
@@100: XOR EAX,EAX
|
||||
MOV RCX,U8 SF_PARAM2[RBP] //argc
|
||||
SHL RCX,3
|
||||
ADD RSP,RCX
|
||||
POP RDI
|
||||
POP RSI
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
/*
|
||||
I8 ArcDetermineCompressionType(U1 *src,U8 size)
|
||||
{
|
||||
U8 i,j=0;
|
||||
for (i=0;i<size;i++)
|
||||
j|=src[i];
|
||||
if (j & 0x80)
|
||||
return CT_8_BIT;
|
||||
else
|
||||
return CT_7_BIT;
|
||||
}
|
||||
*/
|
||||
ALIGN 8,OC_NOP
|
||||
CP_ARC_DETERMINE_COMPRESSION_TYPE::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
PUSH RSI
|
||||
MOV RSI,U8 SF_PARAM1[RBP]
|
||||
MOV RCX,U8 SF_PARAM2[RBP]
|
||||
OR RCX,RCX
|
||||
JZ @@100
|
||||
XOR EBX,EBX
|
||||
@@1: LODSB
|
||||
OR BL,AL
|
||||
LOOP @@1
|
||||
OR BL,BL
|
||||
JNS @@100
|
||||
MOV RAX,CT_8_BIT
|
||||
JMP @@110
|
||||
@@100: MOV RAX,CT_7_BIT
|
||||
@@110: POP RSI
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
/*
|
||||
U8 ArcCheckSum(U1 *buf,U8 size)
|
||||
{
|
||||
U4 *ptr=buf;
|
||||
U8 result=0,i,l=size>>2;
|
||||
for (i=0;i<l;i++)
|
||||
result^=ptr[i];
|
||||
return result;
|
||||
}
|
||||
*/
|
||||
ALIGN 8,OC_NOP
|
||||
CP_ARC_CHECK_SUM::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
PUSH RSI
|
||||
MOV RSI,U8 SF_PARAM1[RBP]
|
||||
MOV RCX,U8 SF_PARAM2[RBP]
|
||||
XOR EBX,EBX
|
||||
SHR RCX,2
|
||||
JZ @@100
|
||||
@@1: LODSD
|
||||
XOR RBX,RAX
|
||||
LOOP @@1
|
||||
@@100: MOV RAX,RBX
|
||||
POP RSI
|
||||
POP RBP
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
|
||||
/*
|
||||
void ArcGetTableEntry(ArcCs *c)
|
||||
{
|
||||
U8 i;
|
||||
ArcTableEntry *temp,*temp1;
|
||||
|
||||
if (c->entry_used) {
|
||||
i=c->free_index;
|
||||
|
||||
c->entry_used=FALSE;
|
||||
c->cur_entry=c->next_entry;
|
||||
c->cur_bits_in_use=c->next_bits_in_use;
|
||||
if (c->next_bits_in_use<ARC_MAX_BITS) {
|
||||
c->next_entry = &c->compress[i++];
|
||||
if (i==c->free_limit) {
|
||||
c->next_bits_in_use++;
|
||||
c->free_limit=1<<c->next_bits_in_use;
|
||||
}
|
||||
} else {
|
||||
do if (++i==c->free_limit)
|
||||
i=c->min_table_entry;
|
||||
while (c->hash[i]);
|
||||
temp=&c->compress[i];
|
||||
c->next_entry=temp;
|
||||
temp1=&c->hash[temp->basecode];
|
||||
while (temp1) {
|
||||
if (temp1->next==temp) {
|
||||
temp1->next=temp->next;
|
||||
break;
|
||||
} else
|
||||
temp1=temp1->next;
|
||||
}
|
||||
}
|
||||
c->free_index=i;
|
||||
}
|
||||
}
|
||||
*/
|
||||
ALIGN 8,OC_NOP
|
||||
CP_ARC_GET_TABLE_ENTRY::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
PUSH RSI
|
||||
PUSH RDI
|
||||
MOV RSI,U8 SF_PARAM1[RBP]
|
||||
BTR U8 ACS_ENTRY_USED[RSI],0
|
||||
JNC U4 @@100
|
||||
MOV RDX,U8 ACS_FREE_INDEX[RSI]
|
||||
XOR EAX,EAX
|
||||
MOV RAX,U8 ACS_NEXT_ENTRY[RSI]
|
||||
MOV U8 ACS_CUR_ENTRY[RSI],RAX
|
||||
MOV RCX,U8 ACS_NEXT_BITS_IN_USE[RSI]
|
||||
MOV U8 ACS_CUR_BITS_IN_USE[RSI],RCX
|
||||
CMP RCX,ARC_MAX_BITS
|
||||
JAE @@20
|
||||
MOV RAX,RDX
|
||||
SHL RAX,4
|
||||
LEA RAX,U8 ACS_COMPRESS[RSI+RAX]
|
||||
MOV U8 ACS_NEXT_ENTRY[RSI],RAX
|
||||
INC RDX
|
||||
CMP U8 ACS_FREE_LIMIT[RSI],RDX
|
||||
JNE @@90
|
||||
INC RCX
|
||||
MOV U8 ACS_NEXT_BITS_IN_USE[RSI],RCX
|
||||
MOV RAX,1
|
||||
SHL RAX,CL
|
||||
MOV U8 ACS_FREE_LIMIT[RSI],RAX
|
||||
JMP @@90
|
||||
@@20: INC RDX
|
||||
CMP U8 ACS_FREE_LIMIT[RSI],RDX
|
||||
JNE @@25
|
||||
MOV RDX,U8 ACS_MIN_TABLE_ENTRY[RSI]
|
||||
@@25: MOV RAX,U8 ACS_HASH[RSI+RDX*8]
|
||||
OR RAX,RAX
|
||||
JNZ @@20
|
||||
MOV RDI,RDX
|
||||
SHL RDI,4
|
||||
LEA RDI,U8 ACS_COMPRESS[RSI+RDI]
|
||||
MOV U4 ACS_NEXT_ENTRY[RSI],EDI
|
||||
MOVZX RBX,U2 ATE_BASECODE[RDI]
|
||||
LEA RCX,U8 ACS_HASH[RSI+RBX*8]
|
||||
@@50: OR RCX,RCX
|
||||
JZ @@90
|
||||
MOV RAX,U8 ATE_NEXT[RCX]
|
||||
CMP RDI,RAX
|
||||
JNE @@55
|
||||
MOV RAX,U8 ATE_NEXT[RDI]
|
||||
MOV U8 ATE_NEXT[RCX],RAX
|
||||
JMP @@90
|
||||
@@55: MOV RCX,RAX
|
||||
JMP @@50
|
||||
@@90: MOV U8 ACS_FREE_INDEX[RSI],RDX
|
||||
@@100: POP RDI
|
||||
POP RSI
|
||||
POP RBP
|
||||
RET
|
||||
|
||||
CP_PUT_GS_BASE::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
MOV RAX,SF_PARAM1[RBP]
|
||||
PUSH RAX
|
||||
PUSH RCX
|
||||
PUSH RDX
|
||||
MOV RDX,RAX
|
||||
SHR RDX,32
|
||||
MOV ECX,IA32_GS_BASE
|
||||
WRMSR
|
||||
POP RDX
|
||||
POP RCX
|
||||
POP RAX
|
||||
POP RBP
|
||||
RET
|
||||
|
||||
PUT_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
|
||||
Reference in new issue
Block a user