TempleOSCDV4.05.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:47:13 +02:00
1 parent d1856315e0
commit 6fe38d2d9d
118 files changed
+4559 -5069

No files matched your search

+4 -49
View File
@@ -211,7 +211,7 @@ U0 CmpLoadDefines()
"I8\0U8\0I16\0U16\0I32\0U32\0I64\0U64\0F64\0String\0");
DefineLstLoad("ST_INT_SIZE_TYPES",
"I8\0U8\0I16\0U16\0I32\0U32\0I64\0U64\0");
DefineLstLoad("ST_TY_TYPES","NULL\0IMM\0REG\0DISP\0SIB\0RIP\0STK\0");
DefineLstLoad("ST_TY_TYPES","NULL\0STK\0IMM\0REG\0DISP\0SIB\0RIP\0");
DefineLstLoad("ST_U8_REGS","AL\0CL\0DL\0BL\0AH\0CH\0DH\0BH\0"
"R8u8\0R9u8\0R10u8\0R11u8\0R12u8\0R13u8\0R14u8\0R15u8\0");
DefineLstLoad("ST_U8_REX_REGS","AL\0CL\0DL\0BL\0RSPu8\0RBPu8\0RSIu8\0RDIu8\0"
@@ -239,68 +239,23 @@ U0 CmpLoadDefines()
U0 CmpFillTables()
{
I64 i,k;
I64 i;
U32 *d;
cmp.to_reg_vars_map=CAlloc(NUM_REGS*sizeof(U8));
cmp.num_reg_vars=0;
cmp.reg_vars_mask=REGG_C_LOCAL_VARS;
cmp.reg_vars_mask=REGG_LOCAL_VARS;
for (i=0;i<NUM_REGS;i++)
if (Bt(&cmp.reg_vars_mask,i))
cmp.to_reg_vars_map[cmp.num_reg_vars++]=i;
cmp.non_ptr_vars_map=CAlloc(NUM_REGS*sizeof(U8));
cmp.num_non_ptr_vars=0;
cmp.non_ptr_vars_mask=REGG_C_LOCAL_NON_PTR_VARS;
cmp.non_ptr_vars_mask=REGG_LOCAL_NON_PTR_VARS;
for (i=0;i<NUM_REGS;i++)
if (Bt(&cmp.non_ptr_vars_mask,i))
cmp.non_ptr_vars_map[cmp.num_non_ptr_vars++]=i;
/* STK TEMP ALLOCATION: See $LK,"::/Compiler/OptPass6.CPP"$.
Expressions are evaluated with a stack machine.
1+(2+3)*4
STK[2]: 1 1 1 1 1 1 21
STK[1]: 2 2 5 5 20
STK[0]: 3 4
The top of the stack is stored in RAX.
STK[2]: RAX 1 1 1 1 1 RAX
STK[1]: RAX 2 RAX 5 RAX
STK[0]: RAX RAX
Two regs are alloced for stk temps.
STK[0]:
R9 : RAX R9 R9 R9 R9 R9 RAX
R8 : RAX R8 RAX R8 RAX
: RAX RAX
Every other funtion, the regs are reversed. This is to reduce
pushes before function calls. R8 is used in even numbered functions
while R9 is used in odd, so maybe we can avoid pushes if only one
stk temp reg is used.
STK[0]:
R9 : RAX R8 R8 R8 R8 R8 RAX
R8 : RAX R9 RAX R9 RAX
: RAX RAX
*/
cmp.to_stk_temps_map_odd =CAlloc(NUM_REGS*sizeof(U8));
cmp.to_stk_temps_map_even=CAlloc(NUM_REGS*sizeof(U8));
cmp.num_stk_temps=0;
cmp.stk_temps_mask=REGG_C_TEMP_CLOBBERED;
for (i=0;i<NUM_REGS;i++)
if (Bt(&cmp.stk_temps_mask,i))
cmp.to_stk_temps_map_even[cmp.num_stk_temps++]=i;
k=cmp.num_stk_temps;
for (i=0;i<NUM_REGS;i++)
if (Bt(&cmp.stk_temps_mask,i))
cmp.to_stk_temps_map_odd[--k]=i;
cmp.dual_U16_tokens1=d=CAlloc(sizeof(U32)*TK_NUM_TK);
d['!']=TK_NOT_EQU<<16+'=';
d['&']=TK_AND_AND<<16+'&';