فهرست منبع

* converted all the magic nasm codes in the x86 internal asm writer from decimal
to octal in the compiler source, so they match the strings in x86ins.dat

git-svn-id: trunk@30566 -

nickysn 10 سال پیش
والد
کامیت
22fb1a3e7e
1فایلهای تغییر یافته به همراه126 افزوده شده و 126 حذف شده
  1. 126 126
      compiler/x86/aasmcpu.pas

+ 126 - 126
compiler/x86/aasmcpu.pas

@@ -2207,62 +2207,62 @@ implementation
           c:=ord(codes^);
           inc(codes);
           case c of
-            0 :
+            &0 :
               break;
-            1,2,3 :
+            &1,&2,&3 :
               begin
                 inc(codes,c);
                 inc(len,c);
               end;
-            8,9,10 :
+            &10,&11,&12 :
               begin
 {$ifdef x86_64}
-                rex:=rex or (rexbits(oper[c-8]^.reg) and $F1);
+                rex:=rex or (rexbits(oper[c-&10]^.reg) and $F1);
 {$endif x86_64}
                 inc(codes);
                 inc(len);
               end;
-            11 :
+            &13 :
               begin
                 inc(codes);
                 inc(len);
               end;
-            4,5,6,7 :
+            &4,&5,&6,&7 :
               begin
                 if opsize={$ifdef i8086}S_L{$else}S_W{$endif} then
                   inc(len,2)
                 else
                   inc(len);
               end;
-            12,13,14,
-            16,17,18,
-            20,21,22,23,
-            40,41,42 :
+            &14,&15,&16,
+            &20,&21,&22,
+            &24,&25,&26,&27,
+            &50,&51,&52 :
               inc(len);
-            24,25,26,
-            31,
-            48,49,50 :
+            &30,&31,&32,
+            &37,
+            &60,&61,&62 :
               inc(len,2);
-            28,29,30:
+            &34,&35,&36:
               begin
                 if opsize=S_Q then
                   inc(len,8)
                 else
                   inc(len,4);
               end;
-            36,37,38:
+            &44,&45,&46:
               inc(len,sizeof(pint));
-            44,45,46:
+            &54,&55,&56:
               inc(len,8);
-            32,33,34,
-            52,53,54,
-            56,57,58,
-            172,173,174 :
+            &40,&41,&42,
+            &64,&65,&66,
+            &70,&71,&72,
+            &254,&255,&256 :
               inc(len,4);
-            60,61,62,63: ; // ignore vex-coded operand-idx
-            208,209,210 :
+            &74,&75,&76,&77: ; // ignore vex-coded operand-idx
+            &320,&321,&322 :
               begin
-                case (oper[c-208]^.ot and OT_SIZE_MASK) of
+                case (oper[c-&320]^.ot and OT_SIZE_MASK) of
 {$if defined(i386) or defined(x86_64)}
                   OT_BITS16 :
 {$elseif defined(i8086)}
@@ -2277,7 +2277,7 @@ implementation
 {$endif x86_64}
                 end;
               end;
-            200 :
+            &310 :
 {$if defined(x86_64)}
               { every insentry with code 0310 must be marked with NOX86_64 }
               InternalError(2011051301);
@@ -2286,53 +2286,53 @@ implementation
 {$elseif defined(i8086)}
               {nothing};
 {$endif}
-            201 :
+            &311 :
 {$if defined(x86_64) or defined(i8086)}
               inc(len)
 {$endif x86_64 or i8086}
               ;
-            212 :
+            &324 :
 {$ifndef i8086}
               inc(len)
 {$endif not i8086}
               ;
-            214 :
+            &326 :
               begin
 {$ifdef x86_64}
                 rex:=rex or $48;
 {$endif x86_64}
               end;
-            202,
-            211,
-            213,
-            215,
-            217,218: ;
-            219:
+            &312,
+            &323,
+            &325,
+            &327,
+            &331,&332: ;
+            &333:
               begin
                 inc(len);
                 exists_prefix_F2 := true;
               end;
-            220:
+            &334:
               begin
                 inc(len);
                 exists_prefix_F3 := true;
               end;
-            241:
+            &361:
               begin
 {$ifndef i8086}
                 inc(len);
                 exists_prefix_66 := true;
 {$endif not i8086}
               end;
-            221:
+            &335:
 {$ifdef x86_64}
               omit_rexw:=true
 {$endif x86_64}
               ;
-            64..151 :
+            &100..&227 :
               begin
 {$ifdef x86_64}
-                 if (c<127) then
+                 if (c<&177) then
                   begin
                     if (oper[c and 7]^.typ=top_reg) then
                       begin
@@ -2350,8 +2350,8 @@ implementation
 {$endif x86_64}
 
               end;
-            242: // VEX prefix for AVX (length = 2 or 3 bytes, dependens on REX.XBW or opcode-prefix ($0F38 or $0F3A))
-                 // =>> DEFAULT = 2 Bytes
+            &362: // VEX prefix for AVX (length = 2 or 3 bytes, dependens on REX.XBW or opcode-prefix ($0F38 or $0F3A))
+                  // =>> DEFAULT = 2 Bytes
               begin
                 if not(exists_vex) then
                 begin
@@ -2359,8 +2359,8 @@ implementation
                   exists_vex := true;
                 end;
               end;
-            243: // REX.W = 1
-                 // =>> VEX prefix length = 3
+            &363: // REX.W = 1
+                  // =>> VEX prefix length = 3
               begin
                 if not(exists_vex_extension) then
                 begin
@@ -2368,14 +2368,14 @@ implementation
                   exists_vex_extension := true;
                 end;
               end;
-            244: ; // VEX length bit
-            246, // operand 2 (ymmreg) encoded immediate byte (bit 4-7)
-            247: inc(len); // operand 3 (ymmreg) encoded immediate byte (bit 4-7)
-            248: // VEX-Extension prefix $0F
-                 // ignore for calculating length
-                 ;
-            249, // VEX-Extension prefix $0F38
-            250: // VEX-Extension prefix $0F3A
+            &364: ; // VEX length bit
+            &366, // operand 2 (ymmreg) encoded immediate byte (bit 4-7)
+            &367: inc(len); // operand 3 (ymmreg) encoded immediate byte (bit 4-7)
+            &370: // VEX-Extension prefix $0F
+                  // ignore for calculating length
+                  ;
+            &371, // VEX-Extension prefix $0F38
+            &372: // VEX-Extension prefix $0F3A
               begin
                 if not(exists_vex_extension) then
                 begin
@@ -2383,7 +2383,7 @@ implementation
                   exists_vex_extension := true;
                 end;
               end;
-            192,193,194:
+            &300,&301,&302:
               begin
 {$if defined(x86_64) or defined(i8086)}
                 if (oper[c and 3]^.ot and OT_SIZE_MASK)=OT_BITS32 then
@@ -2645,28 +2645,28 @@ implementation
           inc(codes);
 
           case c of
-              0: break;
-              1,
-              2,
-              3: inc(codes,c);
-             60: opmode := 0;
-             61: opmode := 1;
-             62: opmode := 2;
-            219: VEXvvvv                := VEXvvvv  OR $02; // set SIMD-prefix $F3
-            220: VEXvvvv                := VEXvvvv  OR $03; // set SIMD-prefix $F2
-            241: VEXvvvv                := VEXvvvv  OR $01; // set SIMD-prefix $66
-            242: needed_VEX             := true;
-            243: begin
+             &0: break;
+             &1,
+             &2,
+             &3: inc(codes,c);
+            &74: opmode := 0;
+            &75: opmode := 1;
+            &76: opmode := 2;
+           &333: VEXvvvv                := VEXvvvv  OR $02; // set SIMD-prefix $F3
+           &334: VEXvvvv                := VEXvvvv  OR $03; // set SIMD-prefix $F2
+           &361: VEXvvvv                := VEXvvvv  OR $01; // set SIMD-prefix $66
+           &362: needed_VEX             := true;
+           &363: begin
                    needed_VEX_Extension := true;
                    VEXvvvv              := VEXvvvv  OR (1 shl 7); // set REX.W
                  end;
-            244: VEXvvvv                := VEXvvvv  OR $04; // vectorlength = 256 bits AND no scalar
-            248: VEXmmmmm               := VEXmmmmm OR $01; // set leading opcode byte $0F
-            249: begin
+           &364: VEXvvvv                := VEXvvvv  OR $04; // vectorlength = 256 bits AND no scalar
+           &370: VEXmmmmm               := VEXmmmmm OR $01; // set leading opcode byte $0F
+           &371: begin
                    needed_VEX_Extension := true;
                    VEXmmmmm             := VEXmmmmm OR $02; // set leading opcode byte $0F38
                  end;
-            250: begin
+           &372: begin
                    needed_VEX_Extension := true;
                    VEXmmmmm             := VEXmmmmm OR $03; // set leading opcode byte $0F3A
                  end;
@@ -2755,9 +2755,9 @@ implementation
           c:=ord(codes^);
           inc(codes);
           case c of
-            0 :
+            &0 :
               break;
-            1,2,3 :
+            &1,&2,&3 :
               begin
 {$ifdef x86_64}
                 if not(needed_VEX) then  // TG
@@ -2766,7 +2766,7 @@ implementation
                 objdata.writebytes(codes^,c);
                 inc(codes,c);
               end;
-            4,6 :
+            &4,&6 :
               begin
                 case oper[0]^.reg of
                   NR_CS:
@@ -2781,11 +2781,11 @@ implementation
                   else
                     internalerror(777004);
                 end;
-                if c=4 then
+                if c=&4 then
                   inc(bytes[0]);
                 objdata.writebytes(bytes,1);
               end;
-            5,7 :
+            &5,&7 :
               begin
                 case oper[0]^.reg of
                   NR_FS:
@@ -2795,29 +2795,29 @@ implementation
                   else
                     internalerror(777005);
                 end;
-                if c=5 then
+                if c=&5 then
                   inc(bytes[0]);
                 objdata.writebytes(bytes,1);
               end;
-            8,9,10 :
+            &10,&11,&12 :
               begin
 {$ifdef x86_64}
                 if not(needed_VEX) then  // TG
                   maybewriterex;
 {$endif x86_64}
-                bytes[0]:=ord(codes^)+regval(oper[c-8]^.reg);
+                bytes[0]:=ord(codes^)+regval(oper[c-&10]^.reg);
                 inc(codes);
                 objdata.writebytes(bytes,1);
               end;
-            11 :
+            &13 :
               begin
                 bytes[0]:=ord(codes^)+condval[condition];
                 inc(codes);
                 objdata.writebytes(bytes,1);
               end;
-            12,13,14 :
+            &14,&15,&16 :
               begin
-                getvalsym(c-12);
+                getvalsym(c-&14);
                 if (currval<-128) or (currval>127) then
                  Message2(asmw_e_value_exceeds_bounds,'signed byte',tostr(currval));
                 if assigned(currsym) then
@@ -2825,9 +2825,9 @@ implementation
                 else
                   objdata.writebytes(currval,1);
               end;
-            16,17,18 :
+            &20,&21,&22 :
               begin
-                getvalsym(c-16);
+                getvalsym(c-&20);
                 if (currval<-256) or (currval>255) then
                  Message2(asmw_e_value_exceeds_bounds,'byte',tostr(currval));
                 if assigned(currsym) then
@@ -2835,9 +2835,9 @@ implementation
                 else
                  objdata.writebytes(currval,1);
               end;
-            20,21,22,23 :
+            &24,&25,&26,&27 :
               begin
-                getvalsym(c-20);
+                getvalsym(c-&24);
                 if (currval<0) or (currval>255) then
                  Message2(asmw_e_value_exceeds_bounds,'unsigned byte',tostr(currval));
                 if assigned(currsym) then
@@ -2845,9 +2845,9 @@ implementation
                 else
                  objdata.writebytes(currval,1);
               end;
-            24,25,26 :     // 030..032
+            &30,&31,&32 :     // 030..032
               begin
-                getvalsym(c-24);
+                getvalsym(c-&30);
 {$ifndef i8086}
                 { currval is an aint so this cannot happen on i8086 and causes only a warning }
                 if (currval<-65536) or (currval>65535) then
@@ -2858,11 +2858,11 @@ implementation
                 else
                  objdata.writebytes(currval,2);
               end;
-            28,29,30 :     // 034..036
+            &34,&35,&36 :     // 034..036
               { !!! These are intended (and used in opcode table) to select depending
                     on address size, *not* operand size. Works by coincidence only. }
               begin
-                getvalsym(c-28);
+                getvalsym(c-&34);
                 if opsize=S_Q then
                   begin
                     if assigned(currsym) then
@@ -2878,17 +2878,17 @@ implementation
                       objdata.writebytes(currval,4);
                   end
               end;
-            32,33,34 :    // 040..042
+            &40,&41,&42 :    // 040..042
               begin
-                getvalsym(c-32);
+                getvalsym(c-&40);
                 if assigned(currsym) then
                  objdata_writereloc(currval,4,currsym,currabsreloc32)
                 else
                  objdata.writebytes(currval,4);
               end;
-            36,37,38 :   // 044..046 - select between word/dword/qword depending on
+            &44,&45,&46 :// 044..046 - select between word/dword/qword depending on
               begin      // address size (we support only default address sizes).
-                getvalsym(c-36);
+                getvalsym(c-&44);
 {$if defined(x86_64)}
                 if assigned(currsym) then
                   objdata_writereloc(currval,8,currsym,currabsreloc)
@@ -2906,9 +2906,9 @@ implementation
                   objdata.writebytes(currval,2);
 {$endif}
               end;
-            40,41,42 :   // 050..052 - byte relative operand
+            &50,&51,&52 :   // 050..052 - byte relative operand
               begin
-                getvalsym(c-40);
+                getvalsym(c-&50);
                 data:=currval-insend;
 {$push}
 {$r-,q-} { disable also overflow as address returns a qword for x86_64 }
@@ -2919,35 +2919,35 @@ implementation
                  Message1(asmw_e_short_jmp_out_of_range,tostr(data));
                 objdata.writebytes(data,1);
               end;
-            44,45,46:   // 054..056 - qword immediate operand
+            &54,&55,&56:   // 054..056 - qword immediate operand
               begin
-                getvalsym(c-44);
+                getvalsym(c-&54);
                 if assigned(currsym) then
                   objdata_writereloc(currval,8,currsym,currabsreloc)
                 else
                   objdata.writebytes(currval,8);
               end;
-            52,53,54 :  // 064..066 - select between 16/32 address mode, but we support only 32
+            &64,&65,&66 :  // 064..066 - select between 16/32 address mode, but we support only 32
               begin
-                getvalsym(c-52);
+                getvalsym(c-&64);
                 if assigned(currsym) then
                  objdata_writereloc(currval,4,currsym,currrelreloc)
                 else
                  objdata_writereloc(currval-insend,4,nil,currabsreloc32)
               end;
-            56,57,58 :  // 070..072 - long relative operand
+            &70,&71,&72 :  // 070..072 - long relative operand
               begin
-                getvalsym(c-56);
+                getvalsym(c-&70);
                 if assigned(currsym) then
                  objdata_writereloc(currval,4,currsym,currrelreloc)
                 else
                  objdata_writereloc(currval-insend,4,nil,currabsreloc32)
               end;
-            60,61,62 : ; // 074..076 - vex-coded vector operand
-                         // ignore
-            172,173,174 :  // 0254..0256 - dword implicitly sign-extended to 64-bit (x86_64 only)
+            &74,&75,&76 : ; // 074..076 - vex-coded vector operand
+                            // ignore
+            &254,&255,&256 :  // 0254..0256 - dword implicitly sign-extended to 64-bit (x86_64 only)
               begin
-                getvalsym(c-172);
+                getvalsym(c-&254);
 {$ifdef x86_64}
                 { for i386 as aint type is longint the
                   following test is useless }
@@ -2960,7 +2960,7 @@ implementation
                 else
                   objdata.writebytes(currval,4);
               end;
-            192,193,194:
+            &300,&301,&302:
               begin
 {$if defined(x86_64) or defined(i8086)}
                 if (oper[c and 3]^.ot and OT_SIZE_MASK)=OT_BITS32 then
@@ -2970,7 +2970,7 @@ implementation
                   end;
 {$endif x86_64 or i8086}
               end;
-            200 :   { fixed 16-bit addr }
+            &310 :   { fixed 16-bit addr }
 {$if defined(x86_64)}
               { every insentry having code 0310 must be marked with NOX86_64 }
               InternalError(2011051302);
@@ -2982,7 +2982,7 @@ implementation
 {$elseif defined(i8086)}
               {nothing};
 {$endif}
-            201 :   { fixed 32-bit addr }
+            &311 :   { fixed 32-bit addr }
 {$if defined(x86_64) or defined(i8086)}
               begin
                 bytes[0]:=$67;
@@ -2990,9 +2990,9 @@ implementation
               end
 {$endif x86_64 or i8086}
                ;
-            208,209,210 :
+            &320,&321,&322 :
               begin
-                case oper[c-208]^.ot and OT_SIZE_MASK of
+                case oper[c-&320]^.ot and OT_SIZE_MASK of
 {$if defined(i386) or defined(x86_64)}
                   OT_BITS16 :
 {$elseif defined(i8086)}
@@ -3008,11 +3008,11 @@ implementation
 {$endif x86_64}
                 end;
               end;
-            211,
-            213 : {no action needed};
+            &323,
+            &325 : {no action needed};
 
-            212,
-            241:
+            &324,
+            &361:
               begin
 {$ifndef i8086}
                 if not(needed_VEX) then
@@ -3022,13 +3022,13 @@ implementation
                 end;
 {$endif not i8086}
               end;
-            214 :
+            &326 :
               begin
 {$ifndef x86_64}
                 Message(asmw_e_64bit_not_supported);
 {$endif x86_64}
               end;
-            219 :
+            &333 :
               begin
                 if not(needed_VEX) then
                 begin
@@ -3036,7 +3036,7 @@ implementation
                   objdata.writebytes(bytes,1);
                 end;
               end;
-            220 :
+            &334 :
               begin
                 if not(needed_VEX) then
                 begin
@@ -3044,17 +3044,17 @@ implementation
                   objdata.writebytes(bytes,1);
                 end;
               end;
-            221:
+            &335:
               ;
-            202,
-            215,
-            217,218 :
+            &312,
+            &327,
+            &331,&332 :
               begin
                 { these are dissambler hints or 32 bit prefixes which
                   are not needed }
               end;
-            242..244: ; // VEX flags =>> nothing todo
-            246: begin
+            &362..&364: ; // VEX flags =>> nothing todo
+            &366: begin
                    if needed_VEX then
                    begin
                      if ops = 4 then
@@ -3075,7 +3075,7 @@ implementation
                    end
                    else Internalerror(2014032004);
                  end;
-            247: begin
+            &367: begin
                    if needed_VEX then
                    begin
                      if ops = 4 then
@@ -3096,9 +3096,9 @@ implementation
                    end
                    else Internalerror(2014032008);
                  end;
-            248..250: ; // VEX flags =>> nothing todo
-            31,
-            48,49,50 :
+            &370..&372: ; // VEX flags =>> nothing todo
+            &37,
+            &60,&61,&62 :
               begin
                 InternalError(777006);
               end
@@ -3110,9 +3110,9 @@ implementation
                   if (rex<>0) and not(rexwritten) then
                     internalerror(200603191);
 {$endif x86_64}
-                if (c>=64) and (c<=151) then  // 0100..0227
+                if (c>=&100) and (c<=&227) then  // 0100..0227
                  begin
-                   if (c<127) then            // 0177
+                   if (c<&177) then            // 0177
                     begin
                       if (oper[c and 7]^.typ=top_reg) then
                         rfield:=regval(oper[c and 7]^.reg)