LTCD_070816.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:45:20 +02:00
1 parent d14bbc24f9
commit 0e9364ff4c
506 files changed
+157705 -41812

No files matched your search

+884
View File
@@ -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