diff --git a/Zenith-latest-2020-03-03-18_03_35.iso b/Zenith-latest-2020-03-03-21_30_17.iso similarity index 99% rename from Zenith-latest-2020-03-03-18_03_35.iso rename to Zenith-latest-2020-03-03-21_30_17.iso index 280a7657..0189c6ab 100755 Binary files a/Zenith-latest-2020-03-03-18_03_35.iso and b/Zenith-latest-2020-03-03-21_30_17.iso differ diff --git a/src/Compiler/Asm.CC b/src/Compiler/Asm.CC index d9eb3d81..3537dbab 100755 --- a/src/Compiler/Asm.CC +++ b/src/Compiler/Asm.CC @@ -223,8 +223,7 @@ I64 AsmMakeArgMask(CCompCtrl *cc, CAsmArg *arg) if (aotc->seg_size == 64) res &= ~ARGG_MOFFS; - if (arg->reg1 != REG_NONE && arg->imm_or_off_present && !arg->num.i && - !arg->num.global_asm_undef_hash && !arg->num.local_asm_undef_hash) + if (arg->reg1 != REG_NONE && arg->imm_or_off_present && !arg->num.i && !arg->num.global_asm_undef_hash && !arg->num.local_asm_undef_hash) arg->imm_or_off_present = FALSE; //Zero displacement if (arg->reg2 != REG_NONE || arg->scale != 1) @@ -245,7 +244,7 @@ I64 AsmMakeArgMask(CCompCtrl *cc, CAsmArg *arg) if (arg->imm_or_off_present) res &= ARGG_MN | ARGG_IMM | ARGG_UIMM | ARGG_REL; else - res &= ARGG_R | ARGG_RM | ARGG_M | ARGG_MN | ARGT_AL | ARGT_AX | ARGT_EAX | ARGT_RAX | ARGT_CL | ARGT_DX; + res &= ARGG_R | ARGG_RM | ARGG_M | ARGG_MN | ARGG_AXCLDX; } if (arg->seg != REG_NONE) @@ -258,45 +257,45 @@ I64 AsmMakeArgMask(CCompCtrl *cc, CAsmArg *arg) else if (arg->num.i < 0) { if (arg->num.i >= I8_MIN) - res &= ARGG_REL | ARGG_IMM;//|ARGT_UIMM64; //0x8FE; + res &= ARGG_REL | ARGG_IMM; else if (arg->num.i >= I16_MIN) - res &= ARGG_REL | ARGT_IMM64 | ARGT_IMM32 | ARGT_IMM16;///|ARGT_UIMM64;//0x8EE; + res &= ARGG_REL | ARGT_IMM64 | ARGT_IMM32 | ARGT_IMM16; else if (arg->num.i >= I32_MIN) - res &= ARGG_REL | ARGT_IMM64 | ARGT_IMM32;//|ARGT_UIMM64;//0x8CE; + res &= ARGG_REL | ARGT_IMM64 | ARGT_IMM32; else - res &= ARGG_REL | ARGT_IMM64;//|ARGT_UIMM64;//0x88E; + res &= ARGG_REL | ARGT_IMM64; } else { if (arg->num.i <= I8_MAX) - res &= ARGG_REL|ARGG_IMM|ARGG_UIMM;//0xFFE; + res &= ARGG_REL | ARGG_IMM | ARGG_UIMM; else if (arg->num.i <= U8_MAX) - res &= ARGG_REL | ARGT_IMM64 | ARGT_IMM32 | ARGT_IMM16 | ARGG_UIMM;//0xFEE; + res &= ARGG_REL | ARGG_IMM & ~ARGT_IMM8 | ARGG_UIMM; else if (arg->num.i <= I16_MAX) - res &= ARGG_REL | ARGT_IMM64 | ARGT_IMM32 | ARGT_IMM16 | ARGT_UIMM64 | ARGT_UIMM32 | ARGT_UIMM16;//0xEEE; + res &= ARGG_REL | ARGG_IMM & ~ARGT_IMM8 | ARGG_UIMM & ~ARGT_UIMM8; else if (arg->num.i <= U16_MAX) - res &= ARGG_REL | ARGT_IMM64 | ARGT_IMM32 | ARGT_UIMM64 | ARGT_UIMM32 | ARGT_UIMM16;//0xECE; + res &= ARGG_REL | ARGT_IMM64 | ARGT_IMM32 | ARGG_UIMM & ~ARGT_UIMM8; else if (arg->num.i <= I32_MAX) - res &= ARGG_REL | ARGT_IMM64 | ARGT_IMM32 | ARGT_UIMM64 | ARGT_UIMM32;//0xCCE; + res &= ARGG_REL | ARGT_IMM64 | ARGT_IMM32 | ARGT_UIMM64 | ARGT_UIMM32; else if (arg->num.i <= U32_MAX) - res &= ARGG_REL | ARGT_IMM64 | ARGT_UIMM64 | ARGT_UIMM32;//0xC8E; + res &= ARGG_REL | ARGT_IMM64 | ARGT_UIMM64 | ARGT_UIMM32; else - res &= ARGG_REL | ARGT_IMM64 | ARGT_UIMM64;//0x88E; + res &= ARGG_REL | ARGT_IMM64 | ARGT_UIMM64; } } else { - res &= ARGG_R | ARGG_RM | ARGG_M | ARGT_AL | ARGT_AX | ARGT_EAX | ARGT_RAX | ARGT_CL | ARGT_DX;//0x3F00FFF000; + res &= ARGG_R | ARGG_RM | ARGG_M | ARGG_AXCLDX; if (!arg->indirect) //M8-M64 res &= ~ARGG_M; } switch (arg->reg1) { - case REG_RAX: res &= ~(ARGT_CL|ARGT_DX); break;//0x3000000000; - case REG_RCX: res &= ~(ARGT_RAX|ARGT_EAX|ARGT_AX|ARGT_AL|ARGT_DX); break;//~0x2F00000000 - case REG_RDX: res &= ~(ARGT_RAX|ARGT_EAX|ARGT_AX|ARGT_AL|ARGT_CL); break;//~0x1F00000000 - default: res &= ~(ARGT_RAX|ARGT_EAX|ARGT_AX|ARGT_AL|ARGT_CL|ARGT_DX);//~0x3F00000000 + case REG_RAX: res &= ~(ARGT_CL | ARGT_DX); break; + case REG_RCX: res &= ~(ARGG_AXCLDX & ~ARGT_CL); break; + case REG_RDX: res &= ~(ARGG_AXCLDX & ~ARGT_DX); break; + default: res &= ~(ARGG_AXCLDX); } mm_done: return res; diff --git a/src/Compiler/AsmInit.CC b/src/Compiler/AsmInit.CC index a393e8a2..1383a2e6 100755 --- a/src/Compiler/AsmInit.CC +++ b/src/Compiler/AsmInit.CC @@ -69,11 +69,11 @@ U0 AsmHashLoad() CInst *tmpins; CHashClass *tmpc; - comp.size_arg_mask[0] = 0x3FF0FFFFFE; - comp.size_arg_mask[1] = 0x1110111112; - comp.size_arg_mask[2] = 0x2220222224; - comp.size_arg_mask[4] = 0x0440444448; - comp.size_arg_mask[8] = ARGG_SIZE_8;//0x20000880888880; + comp.size_arg_mask[0] = ARGG_SIZE_0; + comp.size_arg_mask[1] = ARGG_SIZE_1; + comp.size_arg_mask[2] = ARGG_SIZE_2; + comp.size_arg_mask[4] = ARGG_SIZE_4; + comp.size_arg_mask[8] = ARGG_SIZE_8; comp.size_arg_mask[16] = ARGG_SIZE_16; comp.asm_hash = HashTableNew(1024); @@ -87,7 +87,7 @@ U0 AsmHashLoad() { if (cc->token != TK_IDENT) LexExcept(cc, "Expecting identifier at "); - i = ListMatch(cc->cur_str, "NONE\0R8\0R16\0R32\0R64\0SEG\0FSTACK\0XMM\0OPCODE\0KEYWORD\0ASM_KEYWORD\0"); + i = ListMatch(cc->cur_str, "NONE\0R8\0R16\0R32\0R64\0SEG\0FSTACK\0XMM\0OPCODE\0KEYWORD\0ASM_KEYWORD"); if (i <= 0) LexExcept(cc,"Unknown Statement"); Lex(cc); //skip keyword diff --git a/src/Doc/HelpIndex.DD b/src/Doc/HelpIndex.DD index b7749a16..780a7fbe 100755 Binary files a/src/Doc/HelpIndex.DD and b/src/Doc/HelpIndex.DD differ diff --git a/src/Home/K.CC b/src/Home/K.CC index 453a2a30..ce600a70 100755 --- a/src/Home/K.CC +++ b/src/Home/K.CC @@ -1,4 +1,4 @@ -In("CC\n\n1\n\n5\n\n\n"); +In("CC\n\n1\n\n6\n\n\n"); BootHDIns; "\n\nSuccessful? "; if(YorN) diff --git a/src/Home/Registry.CC b/src/Home/Registry.CC deleted file mode 100755 index 0e859813..00000000 --- a/src/Home/Registry.CC +++ /dev/null @@ -1,10 +0,0 @@ -$TR,"Zenith"$ -$ID,2$$TR,"SysMessageFlags"$ -$ID,2$sys_message_flags[0]=0; -$ID,-2$$TR,"SysRegVer"$ -$ID,2$registry_version=1.000; -$ID,-2$$ID,-2$$TR,"Once"$ -$ID,2$$TR,"Zenith"$ -$ID,2$$ID,-2$$TR,"User"$ -$ID,2$$ID,-2$$ID,-2$$TR,"AutoComplete"$ -$ID,2$ac.col = TEXT_COLS-30;ac.row = TEXT_ROWS/5+4;$ID,-2$ \ No newline at end of file diff --git a/src/Kernel/KernelA.HH b/src/Kernel/KernelA.HH index 8b66d6f4..8b533c04 100755 --- a/src/Kernel/KernelA.HH +++ b/src/Kernel/KernelA.HH @@ -2047,7 +2047,7 @@ class CAsmUnresolvedRef #define ARGT_R16 (1<