Explorar o código

AVX512 support for MMRegister xmm16..31 and ymm16..31, zmm0..31, vpaddsb support AVX512

git-svn-id: branches/tg74/avx512@39196 -
tg74 %!s(int64=7) %!d(string=hai) anos
pai
achega
31e4d4ef5e
Modificáronse 60 ficheiros con 1732 adicións e 165 borrados
  1. 1 1
      compiler/i386/i386nop.inc
  2. 9 2
      compiler/i386/i386tab.inc
  3. 8 0
      compiler/i386/r386ari.inc
  4. 9 1
      compiler/i386/r386att.inc
  5. 8 0
      compiler/i386/r386con.inc
  6. 8 0
      compiler/i386/r386dwrf.inc
  7. 9 1
      compiler/i386/r386int.inc
  8. 9 1
      compiler/i386/r386iri.inc
  9. 9 1
      compiler/i386/r386nasm.inc
  10. 1 1
      compiler/i386/r386nor.inc
  11. 9 1
      compiler/i386/r386nri.inc
  12. 9 1
      compiler/i386/r386num.inc
  13. 9 1
      compiler/i386/r386ot.inc
  14. 8 0
      compiler/i386/r386rni.inc
  15. 9 1
      compiler/i386/r386sri.inc
  16. 8 0
      compiler/i386/r386stab.inc
  17. 9 1
      compiler/i386/r386std.inc
  18. 1 1
      compiler/i8086/i8086nop.inc
  19. 9 2
      compiler/i8086/i8086tab.inc
  20. 8 0
      compiler/i8086/r8086ari.inc
  21. 9 1
      compiler/i8086/r8086att.inc
  22. 8 0
      compiler/i8086/r8086con.inc
  23. 8 0
      compiler/i8086/r8086dwrf.inc
  24. 9 1
      compiler/i8086/r8086int.inc
  25. 9 1
      compiler/i8086/r8086iri.inc
  26. 9 1
      compiler/i8086/r8086nasm.inc
  27. 1 1
      compiler/i8086/r8086nor.inc
  28. 9 1
      compiler/i8086/r8086nri.inc
  29. 9 1
      compiler/i8086/r8086num.inc
  30. 9 1
      compiler/i8086/r8086ot.inc
  31. 8 0
      compiler/i8086/r8086rni.inc
  32. 9 1
      compiler/i8086/r8086sri.inc
  33. 8 0
      compiler/i8086/r8086stab.inc
  34. 9 1
      compiler/i8086/r8086std.inc
  35. 3 3
      compiler/ppcx64.lpi
  36. 3 1
      compiler/utils/mkx86ins.pp
  37. 2 2
      compiler/utils/mkx86reg.pp
  38. 442 68
      compiler/x86/aasmcpu.pas
  39. 1 0
      compiler/x86/agx86int.pas
  40. 11 1
      compiler/x86/cpubase.pas
  41. 20 1
      compiler/x86/rax86.pas
  42. 20 5
      compiler/x86/rax86int.pas
  43. 3 2
      compiler/x86/x86ins.dat
  44. 68 0
      compiler/x86/x86reg.dat
  45. 78 14
      compiler/x86_64/r8664ari.inc
  46. 65 1
      compiler/x86_64/r8664att.inc
  47. 64 0
      compiler/x86_64/r8664con.inc
  48. 65 1
      compiler/x86_64/r8664dwrf.inc
  49. 65 1
      compiler/x86_64/r8664int.inc
  50. 79 15
      compiler/x86_64/r8664iri.inc
  51. 65 1
      compiler/x86_64/r8664nasm.inc
  52. 1 1
      compiler/x86_64/r8664nor.inc
  53. 65 1
      compiler/x86_64/r8664num.inc
  54. 65 1
      compiler/x86_64/r8664ot.inc
  55. 64 0
      compiler/x86_64/r8664rni.inc
  56. 79 15
      compiler/x86_64/r8664sri.inc
  57. 65 1
      compiler/x86_64/r8664stab.inc
  58. 65 1
      compiler/x86_64/r8664std.inc
  59. 1 1
      compiler/x86_64/x8664nop.inc
  60. 9 2
      compiler/x86_64/x8664tab.inc

+ 1 - 1
compiler/i386/i386nop.inc

@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-2117;
+2118;

+ 9 - 2
compiler/i386/i386tab.inc

@@ -11358,14 +11358,21 @@
     opcode  : A_VPADDSB;
     ops     : 3;
     optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
-    code    : #241#242#248#1#236#61#80;
+    code    : #232#241#242#248#1#236#61#80;
     flags   : [if_avx,if_sandybridge]
   ),
   (
     opcode  : A_VPADDSB;
     ops     : 3;
     optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
-    code    : #241#242#244#248#1#236#61#80;
+    code    : #232#241#242#244#248#1#236#61#80;
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPADDSB;
+    ops     : 3;
+    optypes : (ot_zmmreg,ot_zmmreg,ot_zmmrm,ot_none);
+    code    : #232#233#241#248#1#236#61#80;
     flags   : [if_avx2]
   ),
   (

+ 8 - 0
compiler/i386/r386ari.inc

@@ -88,4 +88,12 @@
 88,
 89,
 36,
+90,
+91,
+92,
+93,
+94,
+95,
+96,
+97,
 0

+ 9 - 1
compiler/i386/r386att.inc

@@ -88,4 +88,12 @@
 '%ymm4',
 '%ymm5',
 '%ymm6',
-'%ymm7'
+'%ymm7',
+'%zmm0',
+'%zmm1',
+'%zmm2',
+'%zmm3',
+'%zmm4',
+'%zmm5',
+'%zmm6',
+'%zmm7'

+ 8 - 0
compiler/i386/r386con.inc

@@ -89,3 +89,11 @@ NR_YMM4 = tregister($040D0004);
 NR_YMM5 = tregister($040D0005);
 NR_YMM6 = tregister($040D0006);
 NR_YMM7 = tregister($040D0007);
+NR_ZMM0 = tregister($040E0000);
+NR_ZMM1 = tregister($040E0001);
+NR_ZMM2 = tregister($040E0002);
+NR_ZMM3 = tregister($040E0003);
+NR_ZMM4 = tregister($040E0004);
+NR_ZMM5 = tregister($040E0005);
+NR_ZMM6 = tregister($040E0006);
+NR_ZMM7 = tregister($040E0007);

+ 8 - 0
compiler/i386/r386dwrf.inc

@@ -88,4 +88,12 @@
 25,
 26,
 27,
+28,
+21,
+22,
+23,
+24,
+25,
+26,
+27,
 28

+ 9 - 1
compiler/i386/r386int.inc

@@ -88,4 +88,12 @@
 'ymm4',
 'ymm5',
 'ymm6',
-'ymm7'
+'ymm7',
+'zmm0',
+'zmm1',
+'zmm2',
+'zmm3',
+'zmm4',
+'zmm5',
+'zmm6',
+'zmm7'

+ 9 - 1
compiler/i386/r386iri.inc

@@ -88,4 +88,12 @@
 87,
 88,
 89,
-36
+36,
+90,
+91,
+92,
+93,
+94,
+95,
+96,
+97

+ 9 - 1
compiler/i386/r386nasm.inc

@@ -88,4 +88,12 @@
 'ymm4',
 'ymm5',
 'ymm6',
-'ymm7'
+'ymm7',
+'zmm0',
+'zmm1',
+'zmm2',
+'zmm3',
+'zmm4',
+'zmm5',
+'zmm6',
+'zmm7'

+ 1 - 1
compiler/i386/r386nor.inc

@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86reg.dat }
-90
+98

+ 9 - 1
compiler/i386/r386nri.inc

@@ -88,4 +88,12 @@
 87,
 88,
 89,
-36
+36,
+90,
+91,
+92,
+93,
+94,
+95,
+96,
+97

+ 9 - 1
compiler/i386/r386num.inc

@@ -88,4 +88,12 @@ tregister($040D0003),
 tregister($040D0004),
 tregister($040D0005),
 tregister($040D0006),
-tregister($040D0007)
+tregister($040D0007),
+tregister($040E0000),
+tregister($040E0001),
+tregister($040E0002),
+tregister($040E0003),
+tregister($040E0004),
+tregister($040E0005),
+tregister($040E0006),
+tregister($040E0007)

+ 9 - 1
compiler/i386/r386ot.inc

@@ -88,4 +88,12 @@ OT_YMMREG,
 OT_YMMREG,
 OT_YMMREG,
 OT_YMMREG,
-OT_YMMREG
+OT_YMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG

+ 8 - 0
compiler/i386/r386rni.inc

@@ -57,6 +57,14 @@
 87,
 88,
 89,
+90,
+91,
+92,
+93,
+94,
+95,
+96,
+97,
 25,
 26,
 27,

+ 9 - 1
compiler/i386/r386sri.inc

@@ -88,4 +88,12 @@
 87,
 88,
 89,
-36
+36,
+90,
+91,
+92,
+93,
+94,
+95,
+96,
+97

+ 8 - 0
compiler/i386/r386stab.inc

@@ -88,4 +88,12 @@
 25,
 26,
 27,
+28,
+21,
+22,
+23,
+24,
+25,
+26,
+27,
 28

+ 9 - 1
compiler/i386/r386std.inc

@@ -88,4 +88,12 @@
 'ymm4',
 'ymm5',
 'ymm6',
-'ymm7'
+'ymm7',
+'zmm0',
+'zmm1',
+'zmm2',
+'zmm3',
+'zmm4',
+'zmm5',
+'zmm6',
+'zmm7'

+ 1 - 1
compiler/i8086/i8086nop.inc

@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-2149;
+2150;

+ 9 - 2
compiler/i8086/i8086tab.inc

@@ -11386,14 +11386,21 @@
     opcode  : A_VPADDSB;
     ops     : 3;
     optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
-    code    : #241#242#248#1#236#61#80;
+    code    : #232#241#242#248#1#236#61#80;
     flags   : [if_avx,if_sandybridge]
   ),
   (
     opcode  : A_VPADDSB;
     ops     : 3;
     optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
-    code    : #241#242#244#248#1#236#61#80;
+    code    : #232#241#242#244#248#1#236#61#80;
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPADDSB;
+    ops     : 3;
+    optypes : (ot_zmmreg,ot_zmmreg,ot_zmmrm,ot_none);
+    code    : #232#233#241#248#1#236#61#80;
     flags   : [if_avx2]
   ),
   (

+ 8 - 0
compiler/i8086/r8086ari.inc

@@ -88,4 +88,12 @@
 88,
 89,
 36,
+90,
+91,
+92,
+93,
+94,
+95,
+96,
+97,
 0

+ 9 - 1
compiler/i8086/r8086att.inc

@@ -88,4 +88,12 @@
 '%ymm4',
 '%ymm5',
 '%ymm6',
-'%ymm7'
+'%ymm7',
+'%zmm0',
+'%zmm1',
+'%zmm2',
+'%zmm3',
+'%zmm4',
+'%zmm5',
+'%zmm6',
+'%zmm7'

+ 8 - 0
compiler/i8086/r8086con.inc

@@ -89,3 +89,11 @@ NR_YMM4 = tregister($040D0004);
 NR_YMM5 = tregister($040D0005);
 NR_YMM6 = tregister($040D0006);
 NR_YMM7 = tregister($040D0007);
+NR_ZMM0 = tregister($040E0000);
+NR_ZMM1 = tregister($040E0001);
+NR_ZMM2 = tregister($040E0002);
+NR_ZMM3 = tregister($040E0003);
+NR_ZMM4 = tregister($040E0004);
+NR_ZMM5 = tregister($040E0005);
+NR_ZMM6 = tregister($040E0006);
+NR_ZMM7 = tregister($040E0007);

+ 8 - 0
compiler/i8086/r8086dwrf.inc

@@ -88,4 +88,12 @@
 25,
 26,
 27,
+28,
+21,
+22,
+23,
+24,
+25,
+26,
+27,
 28

+ 9 - 1
compiler/i8086/r8086int.inc

@@ -88,4 +88,12 @@
 'ymm4',
 'ymm5',
 'ymm6',
-'ymm7'
+'ymm7',
+'zmm0',
+'zmm1',
+'zmm2',
+'zmm3',
+'zmm4',
+'zmm5',
+'zmm6',
+'zmm7'

+ 9 - 1
compiler/i8086/r8086iri.inc

@@ -88,4 +88,12 @@
 87,
 88,
 89,
-36
+36,
+90,
+91,
+92,
+93,
+94,
+95,
+96,
+97

+ 9 - 1
compiler/i8086/r8086nasm.inc

@@ -88,4 +88,12 @@
 'ymm4',
 'ymm5',
 'ymm6',
-'ymm7'
+'ymm7',
+'zmm0',
+'zmm1',
+'zmm2',
+'zmm3',
+'zmm4',
+'zmm5',
+'zmm6',
+'zmm7'

+ 1 - 1
compiler/i8086/r8086nor.inc

@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86reg.dat }
-90
+98

+ 9 - 1
compiler/i8086/r8086nri.inc

@@ -88,4 +88,12 @@
 87,
 88,
 89,
-36
+36,
+90,
+91,
+92,
+93,
+94,
+95,
+96,
+97

+ 9 - 1
compiler/i8086/r8086num.inc

@@ -88,4 +88,12 @@ tregister($040D0003),
 tregister($040D0004),
 tregister($040D0005),
 tregister($040D0006),
-tregister($040D0007)
+tregister($040D0007),
+tregister($040E0000),
+tregister($040E0001),
+tregister($040E0002),
+tregister($040E0003),
+tregister($040E0004),
+tregister($040E0005),
+tregister($040E0006),
+tregister($040E0007)

+ 9 - 1
compiler/i8086/r8086ot.inc

@@ -88,4 +88,12 @@ OT_YMMREG,
 OT_YMMREG,
 OT_YMMREG,
 OT_YMMREG,
-OT_YMMREG
+OT_YMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG

+ 8 - 0
compiler/i8086/r8086rni.inc

@@ -57,6 +57,14 @@
 87,
 88,
 89,
+90,
+91,
+92,
+93,
+94,
+95,
+96,
+97,
 25,
 26,
 27,

+ 9 - 1
compiler/i8086/r8086sri.inc

@@ -88,4 +88,12 @@
 87,
 88,
 89,
-36
+36,
+90,
+91,
+92,
+93,
+94,
+95,
+96,
+97

+ 8 - 0
compiler/i8086/r8086stab.inc

@@ -88,4 +88,12 @@
 25,
 26,
 27,
+28,
+21,
+22,
+23,
+24,
+25,
+26,
+27,
 28

+ 9 - 1
compiler/i8086/r8086std.inc

@@ -88,4 +88,12 @@
 'ymm4',
 'ymm5',
 'ymm6',
-'ymm7'
+'ymm7',
+'zmm0',
+'zmm1',
+'zmm2',
+'zmm3',
+'zmm4',
+'zmm5',
+'zmm6',
+'zmm7'

+ 3 - 3
compiler/ppcx64.lpi

@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <CONFIG>
   <ProjectOptions>
     <Version Value="9"/>
@@ -19,14 +19,14 @@
     </BuildModes>
     <PublishOptions>
       <Version Value="2"/>
-      <DestinationDirectory Value="$(TestDir)\publishedproject\"/>
       <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
       <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
     </PublishOptions>
     <RunParams>
       <local>
         <FormatVersion Value="1"/>
-        <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+        <CommandLineParams Value="\home\torsten\tmp\test.pp"/>
+        <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
       </local>
     </RunParams>
     <Units Count="2">

+ 3 - 1
compiler/utils/mkx86ins.pp

@@ -57,7 +57,7 @@ var
 
 function formatop(s:string;allowsizeonly:boolean):string;
    const
-     replaces=28;
+     replaces=29;
      replacetab : array[1..replaces,1..2] of string[32]=(
        (':',' or ot_colon'),
        ('reg','regnorm'),
@@ -73,6 +73,7 @@ function formatop(s:string;allowsizeonly:boolean):string;
        ('mem64','memory or ot_bits64'),
        ('mem128','memory or ot_bits128'),
        ('mem256','memory or ot_bits256'),
+       ('mem512','memory or ot_bits512'),
        ('mem80','memory or ot_bits80'),
        ('mem','memory'),
        ('memory_offs','mem_offs'),
@@ -282,6 +283,7 @@ begin
      begin
         { handle comment }
         readln(infile,s);
+
         while (s[1]=' ') do
          delete(s,1,1);
         if (s='') or (s[1]=';') then

+ 2 - 2
compiler/utils/mkx86reg.pp

@@ -17,7 +17,7 @@
 program mkx86reg;
 
 const Version = '1.00';
-      max_regcount = 200;
+      max_regcount = 255;
 
 var s : string;
     i : longint;
@@ -246,7 +246,7 @@ var infile:text;
 
 begin
    { open dat file }
-   assign(infile,'x86reg.dat');
+   assign(infile,'../x86/x86reg.dat');
    reset(infile);
    while not(eof(infile)) do
      begin

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 442 - 68
compiler/x86/aasmcpu.pas


+ 1 - 0
compiler/x86/agx86int.pas

@@ -386,6 +386,7 @@ implementation
                              writer.AsmWrite('word ptr ');
                      S_XMM: writer.AsmWrite('xmmword ptr ');
                      S_YMM: writer.AsmWrite('ymmword ptr ');
+                     S_ZMM: writer.AsmWrite('zmmword ptr ');
 {$ifdef x86_64}
                      S_BQ : if dest then
                              writer.AsmWrite('qword ptr ')

+ 11 - 1
compiler/x86/cpubase.pas

@@ -589,8 +589,18 @@ implementation
         { for the name the sub reg doesn't matter }
         hr:=r;
         if (getregtype(hr)=R_MMREGISTER) and
-           (getsubreg(hr)<>R_SUBMMY) then
+           (getsubreg(hr)<>R_SUBMMY) and
+           (getsubreg(hr)<>R_SUBMMZ) then
           setsubreg(hr,R_SUBMMX);
+
+        //// TG TODO check
+        //if (getregtype(hr)=R_MMREGISTER) then
+        // case getsubreg(hr) of
+        //   R_SUBMMX: setsubreg(hr,R_SUBMMX);
+        //   R_SUBMMY: setsubreg(hr,R_SUBMMY);
+        //   R_SUBMMZ: setsubreg(hr,R_SUBMMZ);
+        //  else setsubreg(hr,R_SUBMMX);
+        // end;
         result:=findreg_by_number_table(hr,regnumber_index);
       end;
 

+ 20 - 1
compiler/x86/rax86.pas

@@ -195,6 +195,7 @@ begin
   case _size of
     16: size := OS_M128;
     32: size := OS_M256;
+    64: size := OS_M512;
   end;
 
 {$ifdef i8086}
@@ -420,6 +421,7 @@ begin
                                S_Q   : memrefsize := 64;
                                S_XMM : memrefsize := 128;
                                S_YMM : memrefsize := 256;
+                               S_ZMM : memrefsize := 512;
                                   else Internalerror(777200);
                              end;
                              break;
@@ -579,6 +581,21 @@ begin
 
                                Message2(asmr_w_check_mem_operand_automap_multiple_size, std_op2str[opcode], '"256 bit memory operand"');
                              end;
+                    msiMem512:
+                             begin
+                               tx86operand(operands[i]).opsize := S_ZMM;
+                               tx86operand(operands[i]).size   := OS_M512;
+                               opsize := S_ZMM;
+                             end;
+                    msiMultiple512:
+                             begin
+                               tx86operand(operands[i]).opsize := S_ZMM;
+                               tx86operand(operands[i]).size   := OS_M512;
+                               opsize := S_ZMM;
+
+                               Message2(asmr_w_check_mem_operand_automap_multiple_size, std_op2str[opcode], '"512 bit memory operand"');
+                             end;
+
                   msiMemRegSize:
                              begin
                                // mem-ref-size = register size
@@ -750,7 +767,9 @@ begin
                         // in this case is we need the old handling ("S_NO")
                         // =>> ignore
                         if (tx86operand(operands[operand2]).opsize <> S_XMM) and
-                           (tx86operand(operands[operand2]).opsize <> S_YMM) then
+                           (tx86operand(operands[operand2]).opsize <> S_YMM) and
+                           (tx86operand(operands[operand2]).opsize <> S_ZMM) then
+
                           tx86operand(operands[i]).opsize:=tx86operand(operands[operand2]).opsize
                         else tx86operand(operands[operand2]).opsize := S_NO;
                       end;

+ 20 - 5
compiler/x86/rax86int.pas

@@ -43,7 +43,7 @@ Unit Rax86int;
        {------------------ Assembler directives --------------------}
       AS_ALIGN,AS_DB,AS_DW,AS_DD,AS_DQ,AS_PUBLIC,AS_END,
        {------------------ Assembler Operators  --------------------}
-      AS_BYTE,AS_WORD,AS_DWORD,AS_QWORD,AS_TBYTE,AS_DQWORD,AS_OWORD,AS_XMMWORD,AS_YWORD,AS_YMMWORD,AS_NEAR,AS_FAR,
+      AS_BYTE,AS_WORD,AS_DWORD,AS_QWORD,AS_TBYTE,AS_DQWORD,AS_OWORD,AS_XMMWORD,AS_YWORD,AS_YMMWORD,AS_ZWORD,AS_ZMMWORD,AS_NEAR,AS_FAR,
       AS_HIGH,AS_LOW,AS_OFFSET,AS_SIZEOF,AS_VMTOFFSET,AS_SEG,AS_TYPE,AS_PTR,AS_MOD,AS_SHL,AS_SHR,AS_NOT,
       AS_AND,AS_OR,AS_XOR,AS_WRT,AS___GOTPCREL,AS_TARGET_DIRECTIVE);
 
@@ -143,7 +143,7 @@ Unit Rax86int;
        { problems with shl,shr,not,and,or and xor, they are }
        { context sensitive.                                 }
        _asmoperators : array[firstoperator..lastoperator] of tasmkeyword = (
-        'BYTE','WORD','DWORD','QWORD','TBYTE','DQWORD','OWORD','XMMWORD','YWORD','YMMWORD','NEAR','FAR','HIGH',
+        'BYTE','WORD','DWORD','QWORD','TBYTE','DQWORD','OWORD','XMMWORD','YWORD','YMMWORD','ZWORD','ZMMWORD','NEAR','FAR','HIGH',
         'LOW','OFFSET','SIZEOF','VMTOFFSET','SEG','TYPE','PTR','MOD','SHL','SHR','NOT','AND',
         'OR','XOR','WRT','GOTPCREL');
 
@@ -153,11 +153,12 @@ Unit Rax86int;
         ')',':','.','+','-','*',
         ';','identifier','register','opcode','/',
         '','','','','','','END',
-        '','','','','','','','','','','','',
+        '','','','','','','','','','','','','','',
         '','','','sizeof','vmtoffset','','type','ptr','mod','shl','shr','not',
         'and','or','xor','wrt','..gotpcrel',''
       );
 
+
     constructor tx86intreader.create;
       var
         i : tasmop;
@@ -261,6 +262,15 @@ Unit Rax86int;
           begin
             is_register:=true;
             actasmtoken:=AS_REGISTER;
+
+            //TG TODO CHECK
+            if getregtype(actasmregister) = R_MMREGISTER then
+            begin
+//                      actasmpattern:=actasmpattern + c;
+//                       c:=current_scanner.asmgetchar;
+            end;
+
+
           end;
       end;
 
@@ -1012,7 +1022,7 @@ Unit Rax86int;
         while (actasmtoken=AS_DOT) do
          begin
            Consume(AS_DOT);
-           if actasmtoken in [AS_BYTE,AS_ID,AS_WORD,AS_DWORD,AS_QWORD,AS_OWORD,AS_XMMWORD,AS_YWORD,AS_YMMWORD,AS_REGISTER] then
+           if actasmtoken in [AS_BYTE,AS_ID,AS_WORD,AS_DWORD,AS_QWORD,AS_OWORD,AS_XMMWORD,AS_YWORD,AS_YMMWORD,AS_ZWORD,AS_ZMMWORD,AS_REGISTER] then
              begin
                s:=s+'.'+actasmpattern;
                consume(actasmtoken);
@@ -2363,7 +2373,10 @@ Unit Rax86int;
             AS_OWORD,
             AS_XMMWORD,
             AS_YWORD,
-            AS_YMMWORD:
+            AS_YMMWORD,
+            AS_ZWORD,
+            AS_ZMMWORD
+            :
               begin
                 { Type specifier }
                 oper.hastype:=true;
@@ -2379,6 +2392,8 @@ Unit Rax86int;
                   AS_XMMWORD: oper.typesize:=16; 
                   AS_YWORD,                     
                   AS_YMMWORD: oper.typesize:=32;
+                  AS_ZWORD,
+                  AS_ZMMWORD: oper.typesize:=64;
                   else
                     internalerror(2010061101);
                 end;

+ 3 - 2
compiler/x86/x86ins.dat

@@ -4513,8 +4513,9 @@ ymmreg,ymmreg,ymmrm                  \361\362\364\370\1\xD4\75\120        AVX2
 
 [VPADDSB]
 (Ch_Rop1, Ch_Rop2, Ch_Wop3)
-xmmreg,xmmreg,xmmrm                  \361\362\370\1\xEC\75\120            AVX,SANDYBRIDGE
-ymmreg,ymmreg,ymmrm                  \361\362\364\370\1\xEC\75\120        AVX2
+xmmreg,xmmreg,xmmrm                  \350\361\362\370\1\xEC\75\120            AVX,SANDYBRIDGE
+ymmreg,ymmreg,ymmrm                  \350\361\362\364\370\1\xEC\75\120        AVX2
+zmmreg,zmmreg,zmmrm                  \350\351\361\370\1\xEC\75\120            AVX2
 
 [VPADDSW]
 (Ch_Rop1, Ch_Rop2, Ch_Wop3)

+ 68 - 0
compiler/x86/x86reg.dat

@@ -159,6 +159,23 @@ NR_XMM12,$040C000c,xmm12,%xmm12,xmm12,xmm12,-1,-1,29,OT_XMMREG,4,64
 NR_XMM13,$040C000d,xmm13,%xmm13,xmm13,xmm13,-1,-1,30,OT_XMMREG,5,64
 NR_XMM14,$040C000e,xmm14,%xmm14,xmm14,xmm14,-1,-1,31,OT_XMMREG,6,64
 NR_XMM15,$040C000f,xmm15,%xmm15,xmm15,xmm15,-1,-1,32,OT_XMMREG,7,64
+NR_XMM16,$040C0010,xmm16,%xmm16,xmm16,xmm16,-1,-1,33,OT_XMMREG,0,64
+NR_XMM17,$040C0011,xmm17,%xmm17,xmm17,xmm17,-1,-1,34,OT_XMMREG,1,64
+NR_XMM18,$040C0012,xmm18,%xmm18,xmm18,xmm18,-1,-1,35,OT_XMMREG,2,64
+NR_XMM19,$040C0013,xmm19,%xmm19,xmm19,xmm19,-1,-1,36,OT_XMMREG,3,64
+NR_XMM20,$040C0014,xmm20,%xmm20,xmm20,xmm20,-1,-1,37,OT_XMMREG,4,64
+NR_XMM21,$040C0015,xmm21,%xmm21,xmm21,xmm21,-1,-1,38,OT_XMMREG,5,64
+NR_XMM22,$040C0016,xmm22,%xmm22,xmm22,xmm22,-1,-1,39,OT_XMMREG,6,64
+NR_XMM23,$040C0017,xmm23,%xmm23,xmm23,xmm23,-1,-1,40,OT_XMMREG,7,64
+NR_XMM24,$040C0018,xmm24,%xmm24,xmm24,xmm24,-1,-1,41,OT_XMMREG,0,64
+NR_XMM25,$040C0019,xmm25,%xmm25,xmm25,xmm25,-1,-1,42,OT_XMMREG,1,64
+NR_XMM26,$040C001A,xmm26,%xmm26,xmm26,xmm26,-1,-1,43,OT_XMMREG,2,64
+NR_XMM27,$040C001B,xmm27,%xmm27,xmm27,xmm27,-1,-1,44,OT_XMMREG,3,64
+NR_XMM28,$040C001C,xmm28,%xmm28,xmm28,xmm28,-1,-1,45,OT_XMMREG,4,64
+NR_XMM29,$040C001D,xmm29,%xmm29,xmm29,xmm29,-1,-1,46,OT_XMMREG,5,64
+NR_XMM30,$040C001E,xmm30,%xmm30,xmm30,xmm30,-1,-1,47,OT_XMMREG,6,64
+NR_XMM31,$040C001F,xmm31,%xmm31,xmm31,xmm31,-1,-1,48,OT_XMMREG,7,64
+
 
 NR_YMM0,$040D0000,ymm0,%ymm0,ymm0,ymm0,21,21,17,OT_YMMREG,0
 NR_YMM1,$040D0001,ymm1,%ymm1,ymm1,ymm1,22,22,18,OT_YMMREG,1
@@ -176,3 +193,54 @@ NR_YMM12,$040D000c,ymm12,%ymm12,ymm12,ymm12,-1,-1,29,OT_YMMREG,4,64
 NR_YMM13,$040D000d,ymm13,%ymm13,ymm13,ymm13,-1,-1,30,OT_YMMREG,5,64
 NR_YMM14,$040D000e,ymm14,%ymm14,ymm14,ymm14,-1,-1,31,OT_YMMREG,6,64
 NR_YMM15,$040D000f,ymm15,%ymm15,ymm15,ymm15,-1,-1,32,OT_YMMREG,7,64
+NR_YMM16,$040D0010,ymm16,%ymm16,ymm16,ymm16,-1,-1,33,OT_YMMREG,0,64
+NR_YMM17,$040D0011,ymm17,%ymm17,ymm17,ymm17,-1,-1,34,OT_YMMREG,1,64
+NR_YMM18,$040D0012,ymm18,%ymm18,ymm18,ymm18,-1,-1,35,OT_YMMREG,2,64
+NR_YMM19,$040D0013,ymm19,%ymm19,ymm19,ymm19,-1,-1,36,OT_YMMREG,3,64
+NR_YMM20,$040D0014,ymm20,%ymm20,ymm20,ymm20,-1,-1,37,OT_YMMREG,4,64
+NR_YMM21,$040D0015,ymm21,%ymm21,ymm21,ymm21,-1,-1,38,OT_YMMREG,5,64
+NR_YMM22,$040D0016,ymm22,%ymm22,ymm22,ymm22,-1,-1,39,OT_YMMREG,6,64
+NR_YMM23,$040D0017,ymm23,%ymm23,ymm23,ymm23,-1,-1,40,OT_YMMREG,7,64
+NR_YMM24,$040D0018,ymm24,%ymm24,ymm24,ymm24,-1,-1,41,OT_YMMREG,0,64
+NR_YMM25,$040D0019,ymm25,%ymm25,ymm25,ymm25,-1,-1,42,OT_YMMREG,1,64
+NR_YMM26,$040D001a,ymm26,%ymm26,ymm26,ymm26,-1,-1,43,OT_YMMREG,2,64
+NR_YMM27,$040D001b,ymm27,%ymm27,ymm27,ymm27,-1,-1,44,OT_YMMREG,3,64
+NR_YMM28,$040D001c,ymm28,%ymm28,ymm28,ymm28,-1,-1,45,OT_YMMREG,4,64
+NR_YMM29,$040D001d,ymm29,%ymm29,ymm29,ymm29,-1,-1,46,OT_YMMREG,5,64
+NR_YMM30,$040D001e,ymm30,%ymm30,ymm30,ymm30,-1,-1,47,OT_YMMREG,6,64
+NR_YMM31,$040D001f,ymm31,%ymm31,ymm31,ymm31,-1,-1,48,OT_YMMREG,7,64
+
+
+NR_ZMM0,$040E0000,zmm0,%zmm0,zmm0,zmm0,21,21,17,OT_ZMMREG,0
+NR_ZMM1,$040E0001,zmm1,%zmm1,zmm1,zmm1,22,22,18,OT_ZMMREG,1
+NR_ZMM2,$040E0002,zmm2,%zmm2,zmm2,zmm2,23,23,19,OT_ZMMREG,2
+NR_ZMM3,$040E0003,zmm3,%zmm3,zmm3,zmm3,24,24,20,OT_ZMMREG,3
+NR_ZMM4,$040E0004,zmm4,%zmm4,zmm4,zmm4,25,25,21,OT_ZMMREG,4
+NR_ZMM5,$040E0005,zmm5,%zmm5,zmm5,zmm5,26,26,22,OT_ZMMREG,5
+NR_ZMM6,$040E0006,zmm6,%zmm6,zmm6,zmm6,27,27,23,OT_ZMMREG,6
+NR_ZMM7,$040E0007,zmm7,%zmm7,zmm7,zmm7,28,28,24,OT_ZMMREG,7
+NR_ZMM8,$040E0008,zmm8,%zmm8,zmm8,zmm8,-1,-1,25,OT_ZMMREG,0,64
+NR_ZMM9,$040E0009,zmm9,%zmm9,zmm9,zmm9,-1,-1,26,OT_ZMMREG,1,64
+NR_ZMM10,$040E000A,zmm10,%zmm10,zmm10,zmm10,-1,-1,27,OT_ZMMREG,2,64
+NR_ZMM11,$040E000B,zmm11,%zmm11,zmm11,zmm11,-1,-1,28,OT_ZMMREG,3,64
+NR_ZMM12,$040E000C,zmm12,%zmm12,zmm12,zmm12,-1,-1,29,OT_ZMMREG,4,64
+NR_ZMM13,$040E000D,zmm13,%zmm13,zmm13,zmm13,-1,-1,30,OT_ZMMREG,5,64
+NR_ZMM14,$040E000E,zmm14,%zmm14,zmm14,zmm14,-1,-1,31,OT_ZMMREG,6.64
+NR_ZMM15,$040E000F,zmm15,%zmm15,zmm15,zmm15,-1,-1,32,OT_ZMMREG,7,64
+NR_ZMM16,$040E0010,zmm16,%zmm16,zmm16,zmm16,-1,-1,33,OT_ZMMREG,0,64
+NR_ZMM17,$040E0011,zmm17,%zmm17,zmm17,zmm17,-1,-1,34,OT_ZMMREG,1,64
+NR_ZMM18,$040E0012,zmm18,%zmm18,zmm18,zmm18,-1,-1,35,OT_ZMMREG,2,64
+NR_ZMM19,$040E0013,zmm19,%zmm19,zmm19,zmm19,-1,-1,36,OT_ZMMREG,3,64
+NR_ZMM20,$040E0014,zmm20,%zmm20,zmm20,zmm20,-1,-1,37,OT_ZMMREG,4,64
+NR_ZMM21,$040E0015,zmm21,%zmm21,zmm21,zmm21,-1,-1,38,OT_ZMMREG,5,64
+NR_ZMM22,$040E0016,zmm22,%zmm22,zmm22,zmm22,-1,-1,39,OT_ZMMREG,6,64
+NR_ZMM23,$040E0017,zmm23,%zmm23,zmm23,zmm23,-1,-1,40,OT_ZMMREG,7,64
+NR_ZMM24,$040E0018,zmm24,%zmm24,zmm24,zmm24,-1,-1,41,OT_ZMMREG,0,64
+NR_ZMM25,$040E0019,zmm25,%zmm25,zmm25,zmm25,-1,-1,42,OT_ZMMREG,1,64
+NR_ZMM26,$040E001A,zmm26,%zmm26,zmm26,zmm26,-1,-1,43,OT_ZMMREG,2,64
+NR_ZMM27,$040E001B,zmm27,%zmm27,zmm27,zmm27,-1,-1,44,OT_ZMMREG,3,64
+NR_ZMM28,$040E001C,zmm28,%zmm28,zmm28,zmm28,-1,-1,45,OT_ZMMREG,4,64
+NR_ZMM29,$040E001D,zmm29,%zmm29,zmm29,zmm29,-1,-1,46,OT_ZMMREG,5,64
+NR_ZMM30,$040E001E,zmm30,%zmm30,zmm30,zmm30,-1,-1,47,OT_ZMMREG,6,64
+NR_ZMM31,$040E001F,zmm31,%zmm31,zmm31,zmm31,-1,-1,48,OT_ZMMREG,7,64
+

+ 78 - 14
compiler/x86_64/r8664ari.inc

@@ -125,29 +125,93 @@
 133,
 134,
 135,
-122,
-123,
-124,
-125,
-126,
-127,
-128,
-129,
 136,
 137,
-146,
-147,
-148,
-149,
-150,
-151,
 138,
 139,
+122,
 140,
 141,
 142,
 143,
 144,
 145,
+146,
+147,
+148,
+149,
+123,
+150,
+151,
+124,
+125,
+126,
+127,
+128,
+129,
+152,
+153,
+162,
+163,
+164,
+165,
+166,
+167,
+168,
+169,
+170,
+171,
+154,
+172,
+173,
+174,
+175,
+176,
+177,
+178,
+179,
+180,
+181,
+155,
+182,
+183,
+156,
+157,
+158,
+159,
+160,
+161,
 81,
+184,
+185,
+194,
+195,
+196,
+197,
+198,
+199,
+200,
+201,
+202,
+203,
+186,
+204,
+205,
+206,
+207,
+208,
+209,
+210,
+211,
+212,
+213,
+187,
+214,
+215,
+188,
+189,
+190,
+191,
+192,
+193,
 0

+ 65 - 1
compiler/x86_64/r8664att.inc

@@ -135,6 +135,22 @@
 '%xmm13',
 '%xmm14',
 '%xmm15',
+'%xmm16',
+'%xmm17',
+'%xmm18',
+'%xmm19',
+'%xmm20',
+'%xmm21',
+'%xmm22',
+'%xmm23',
+'%xmm24',
+'%xmm25',
+'%xmm26',
+'%xmm27',
+'%xmm28',
+'%xmm29',
+'%xmm30',
+'%xmm31',
 '%ymm0',
 '%ymm1',
 '%ymm2',
@@ -150,4 +166,52 @@
 '%ymm12',
 '%ymm13',
 '%ymm14',
-'%ymm15'
+'%ymm15',
+'%ymm16',
+'%ymm17',
+'%ymm18',
+'%ymm19',
+'%ymm20',
+'%ymm21',
+'%ymm22',
+'%ymm23',
+'%ymm24',
+'%ymm25',
+'%ymm26',
+'%ymm27',
+'%ymm28',
+'%ymm29',
+'%ymm30',
+'%ymm31',
+'%zmm0',
+'%zmm1',
+'%zmm2',
+'%zmm3',
+'%zmm4',
+'%zmm5',
+'%zmm6',
+'%zmm7',
+'%zmm8',
+'%zmm9',
+'%zmm10',
+'%zmm11',
+'%zmm12',
+'%zmm13',
+'%zmm14',
+'%zmm15',
+'%zmm16',
+'%zmm17',
+'%zmm18',
+'%zmm19',
+'%zmm20',
+'%zmm21',
+'%zmm22',
+'%zmm23',
+'%zmm24',
+'%zmm25',
+'%zmm26',
+'%zmm27',
+'%zmm28',
+'%zmm29',
+'%zmm30',
+'%zmm31'

+ 64 - 0
compiler/x86_64/r8664con.inc

@@ -135,6 +135,22 @@ NR_XMM12 = tregister($040C000c);
 NR_XMM13 = tregister($040C000d);
 NR_XMM14 = tregister($040C000e);
 NR_XMM15 = tregister($040C000f);
+NR_XMM16 = tregister($040C0010);
+NR_XMM17 = tregister($040C0011);
+NR_XMM18 = tregister($040C0012);
+NR_XMM19 = tregister($040C0013);
+NR_XMM20 = tregister($040C0014);
+NR_XMM21 = tregister($040C0015);
+NR_XMM22 = tregister($040C0016);
+NR_XMM23 = tregister($040C0017);
+NR_XMM24 = tregister($040C0018);
+NR_XMM25 = tregister($040C0019);
+NR_XMM26 = tregister($040C001A);
+NR_XMM27 = tregister($040C001B);
+NR_XMM28 = tregister($040C001C);
+NR_XMM29 = tregister($040C001D);
+NR_XMM30 = tregister($040C001E);
+NR_XMM31 = tregister($040C001F);
 NR_YMM0 = tregister($040D0000);
 NR_YMM1 = tregister($040D0001);
 NR_YMM2 = tregister($040D0002);
@@ -151,3 +167,51 @@ NR_YMM12 = tregister($040D000c);
 NR_YMM13 = tregister($040D000d);
 NR_YMM14 = tregister($040D000e);
 NR_YMM15 = tregister($040D000f);
+NR_YMM16 = tregister($040D0010);
+NR_YMM17 = tregister($040D0011);
+NR_YMM18 = tregister($040D0012);
+NR_YMM19 = tregister($040D0013);
+NR_YMM20 = tregister($040D0014);
+NR_YMM21 = tregister($040D0015);
+NR_YMM22 = tregister($040D0016);
+NR_YMM23 = tregister($040D0017);
+NR_YMM24 = tregister($040D0018);
+NR_YMM25 = tregister($040D0019);
+NR_YMM26 = tregister($040D001a);
+NR_YMM27 = tregister($040D001b);
+NR_YMM28 = tregister($040D001c);
+NR_YMM29 = tregister($040D001d);
+NR_YMM30 = tregister($040D001e);
+NR_YMM31 = tregister($040D001f);
+NR_ZMM0 = tregister($040E0000);
+NR_ZMM1 = tregister($040E0001);
+NR_ZMM2 = tregister($040E0002);
+NR_ZMM3 = tregister($040E0003);
+NR_ZMM4 = tregister($040E0004);
+NR_ZMM5 = tregister($040E0005);
+NR_ZMM6 = tregister($040E0006);
+NR_ZMM7 = tregister($040E0007);
+NR_ZMM8 = tregister($040E0008);
+NR_ZMM9 = tregister($040E0009);
+NR_ZMM10 = tregister($040E000A);
+NR_ZMM11 = tregister($040E000B);
+NR_ZMM12 = tregister($040E000C);
+NR_ZMM13 = tregister($040E000D);
+NR_ZMM14 = tregister($040E000E);
+NR_ZMM15 = tregister($040E000F);
+NR_ZMM16 = tregister($040E0010);
+NR_ZMM17 = tregister($040E0011);
+NR_ZMM18 = tregister($040E0012);
+NR_ZMM19 = tregister($040E0013);
+NR_ZMM20 = tregister($040E0014);
+NR_ZMM21 = tregister($040E0015);
+NR_ZMM22 = tregister($040E0016);
+NR_ZMM23 = tregister($040E0017);
+NR_ZMM24 = tregister($040E0018);
+NR_ZMM25 = tregister($040E0019);
+NR_ZMM26 = tregister($040E001A);
+NR_ZMM27 = tregister($040E001B);
+NR_ZMM28 = tregister($040E001C);
+NR_ZMM29 = tregister($040E001D);
+NR_ZMM30 = tregister($040E001E);
+NR_ZMM31 = tregister($040E001F);

+ 65 - 1
compiler/x86_64/r8664dwrf.inc

@@ -135,6 +135,54 @@
 30,
 31,
 32,
+33,
+34,
+35,
+36,
+37,
+38,
+39,
+40,
+41,
+42,
+43,
+44,
+45,
+46,
+47,
+48,
+17,
+18,
+19,
+20,
+21,
+22,
+23,
+24,
+25,
+26,
+27,
+28,
+29,
+30,
+31,
+32,
+33,
+34,
+35,
+36,
+37,
+38,
+39,
+40,
+41,
+42,
+43,
+44,
+45,
+46,
+47,
+48,
 17,
 18,
 19,
@@ -150,4 +198,20 @@
 29,
 30,
 31,
-32
+32,
+33,
+34,
+35,
+36,
+37,
+38,
+39,
+40,
+41,
+42,
+43,
+44,
+45,
+46,
+47,
+48

+ 65 - 1
compiler/x86_64/r8664int.inc

@@ -135,6 +135,22 @@
 'xmm13',
 'xmm14',
 'xmm15',
+'xmm16',
+'xmm17',
+'xmm18',
+'xmm19',
+'xmm20',
+'xmm21',
+'xmm22',
+'xmm23',
+'xmm24',
+'xmm25',
+'xmm26',
+'xmm27',
+'xmm28',
+'xmm29',
+'xmm30',
+'xmm31',
 'ymm0',
 'ymm1',
 'ymm2',
@@ -150,4 +166,52 @@
 'ymm12',
 'ymm13',
 'ymm14',
-'ymm15'
+'ymm15',
+'ymm16',
+'ymm17',
+'ymm18',
+'ymm19',
+'ymm20',
+'ymm21',
+'ymm22',
+'ymm23',
+'ymm24',
+'ymm25',
+'ymm26',
+'ymm27',
+'ymm28',
+'ymm29',
+'ymm30',
+'ymm31',
+'zmm0',
+'zmm1',
+'zmm2',
+'zmm3',
+'zmm4',
+'zmm5',
+'zmm6',
+'zmm7',
+'zmm8',
+'zmm9',
+'zmm10',
+'zmm11',
+'zmm12',
+'zmm13',
+'zmm14',
+'zmm15',
+'zmm16',
+'zmm17',
+'zmm18',
+'zmm19',
+'zmm20',
+'zmm21',
+'zmm22',
+'zmm23',
+'zmm24',
+'zmm25',
+'zmm26',
+'zmm27',
+'zmm28',
+'zmm29',
+'zmm30',
+'zmm31'

+ 79 - 15
compiler/x86_64/r8664iri.inc

@@ -126,28 +126,92 @@
 133,
 134,
 135,
-122,
-123,
-124,
-125,
-126,
-127,
-128,
-129,
 136,
 137,
-146,
-147,
-148,
-149,
-150,
-151,
 138,
 139,
+122,
 140,
 141,
 142,
 143,
 144,
 145,
-81
+146,
+147,
+148,
+149,
+123,
+150,
+151,
+124,
+125,
+126,
+127,
+128,
+129,
+152,
+153,
+162,
+163,
+164,
+165,
+166,
+167,
+168,
+169,
+170,
+171,
+154,
+172,
+173,
+174,
+175,
+176,
+177,
+178,
+179,
+180,
+181,
+155,
+182,
+183,
+156,
+157,
+158,
+159,
+160,
+161,
+81,
+184,
+185,
+194,
+195,
+196,
+197,
+198,
+199,
+200,
+201,
+202,
+203,
+186,
+204,
+205,
+206,
+207,
+208,
+209,
+210,
+211,
+212,
+213,
+187,
+214,
+215,
+188,
+189,
+190,
+191,
+192,
+193

+ 65 - 1
compiler/x86_64/r8664nasm.inc

@@ -135,6 +135,22 @@
 'xmm13',
 'xmm14',
 'xmm15',
+'xmm16',
+'xmm17',
+'xmm18',
+'xmm19',
+'xmm20',
+'xmm21',
+'xmm22',
+'xmm23',
+'xmm24',
+'xmm25',
+'xmm26',
+'xmm27',
+'xmm28',
+'xmm29',
+'xmm30',
+'xmm31',
 'ymm0',
 'ymm1',
 'ymm2',
@@ -150,4 +166,52 @@
 'ymm12',
 'ymm13',
 'ymm14',
-'ymm15'
+'ymm15',
+'ymm16',
+'ymm17',
+'ymm18',
+'ymm19',
+'ymm20',
+'ymm21',
+'ymm22',
+'ymm23',
+'ymm24',
+'ymm25',
+'ymm26',
+'ymm27',
+'ymm28',
+'ymm29',
+'ymm30',
+'ymm31',
+'zmm0',
+'zmm1',
+'zmm2',
+'zmm3',
+'zmm4',
+'zmm5',
+'zmm6',
+'zmm7',
+'zmm8',
+'zmm9',
+'zmm10',
+'zmm11',
+'zmm12',
+'zmm13',
+'zmm14',
+'zmm15',
+'zmm16',
+'zmm17',
+'zmm18',
+'zmm19',
+'zmm20',
+'zmm21',
+'zmm22',
+'zmm23',
+'zmm24',
+'zmm25',
+'zmm26',
+'zmm27',
+'zmm28',
+'zmm29',
+'zmm30',
+'zmm31'

+ 1 - 1
compiler/x86_64/r8664nor.inc

@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86reg.dat }
-152
+216

+ 65 - 1
compiler/x86_64/r8664num.inc

@@ -135,6 +135,22 @@ tregister($040C000c),
 tregister($040C000d),
 tregister($040C000e),
 tregister($040C000f),
+tregister($040C0010),
+tregister($040C0011),
+tregister($040C0012),
+tregister($040C0013),
+tregister($040C0014),
+tregister($040C0015),
+tregister($040C0016),
+tregister($040C0017),
+tregister($040C0018),
+tregister($040C0019),
+tregister($040C001A),
+tregister($040C001B),
+tregister($040C001C),
+tregister($040C001D),
+tregister($040C001E),
+tregister($040C001F),
 tregister($040D0000),
 tregister($040D0001),
 tregister($040D0002),
@@ -150,4 +166,52 @@ tregister($040D000b),
 tregister($040D000c),
 tregister($040D000d),
 tregister($040D000e),
-tregister($040D000f)
+tregister($040D000f),
+tregister($040D0010),
+tregister($040D0011),
+tregister($040D0012),
+tregister($040D0013),
+tregister($040D0014),
+tregister($040D0015),
+tregister($040D0016),
+tregister($040D0017),
+tregister($040D0018),
+tregister($040D0019),
+tregister($040D001a),
+tregister($040D001b),
+tregister($040D001c),
+tregister($040D001d),
+tregister($040D001e),
+tregister($040D001f),
+tregister($040E0000),
+tregister($040E0001),
+tregister($040E0002),
+tregister($040E0003),
+tregister($040E0004),
+tregister($040E0005),
+tregister($040E0006),
+tregister($040E0007),
+tregister($040E0008),
+tregister($040E0009),
+tregister($040E000A),
+tregister($040E000B),
+tregister($040E000C),
+tregister($040E000D),
+tregister($040E000E),
+tregister($040E000F),
+tregister($040E0010),
+tregister($040E0011),
+tregister($040E0012),
+tregister($040E0013),
+tregister($040E0014),
+tregister($040E0015),
+tregister($040E0016),
+tregister($040E0017),
+tregister($040E0018),
+tregister($040E0019),
+tregister($040E001A),
+tregister($040E001B),
+tregister($040E001C),
+tregister($040E001D),
+tregister($040E001E),
+tregister($040E001F)

+ 65 - 1
compiler/x86_64/r8664ot.inc

@@ -135,6 +135,39 @@ OT_XMMREG,
 OT_XMMREG,
 OT_XMMREG,
 OT_XMMREG,
+OT_XMMREG,
+OT_XMMREG,
+OT_XMMREG,
+OT_XMMREG,
+OT_XMMREG,
+OT_XMMREG,
+OT_XMMREG,
+OT_XMMREG,
+OT_XMMREG,
+OT_XMMREG,
+OT_XMMREG,
+OT_XMMREG,
+OT_XMMREG,
+OT_XMMREG,
+OT_XMMREG,
+OT_XMMREG,
+OT_YMMREG,
+OT_YMMREG,
+OT_YMMREG,
+OT_YMMREG,
+OT_YMMREG,
+OT_YMMREG,
+OT_YMMREG,
+OT_YMMREG,
+OT_YMMREG,
+OT_YMMREG,
+OT_YMMREG,
+OT_YMMREG,
+OT_YMMREG,
+OT_YMMREG,
+OT_YMMREG,
+OT_YMMREG,
+OT_YMMREG,
 OT_YMMREG,
 OT_YMMREG,
 OT_YMMREG,
@@ -150,4 +183,35 @@ OT_YMMREG,
 OT_YMMREG,
 OT_YMMREG,
 OT_YMMREG,
-OT_YMMREG
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG,
+OT_ZMMREG

+ 64 - 0
compiler/x86_64/r8664rni.inc

@@ -117,6 +117,70 @@
 149,
 150,
 151,
+152,
+153,
+154,
+155,
+156,
+157,
+158,
+159,
+160,
+161,
+162,
+163,
+164,
+165,
+166,
+167,
+168,
+169,
+170,
+171,
+172,
+173,
+174,
+175,
+176,
+177,
+178,
+179,
+180,
+181,
+182,
+183,
+184,
+185,
+186,
+187,
+188,
+189,
+190,
+191,
+192,
+193,
+194,
+195,
+196,
+197,
+198,
+199,
+200,
+201,
+202,
+203,
+204,
+205,
+206,
+207,
+208,
+209,
+210,
+211,
+212,
+213,
+214,
+215,
 69,
 70,
 71,

+ 79 - 15
compiler/x86_64/r8664sri.inc

@@ -126,28 +126,92 @@
 133,
 134,
 135,
-122,
-123,
-124,
-125,
-126,
-127,
-128,
-129,
 136,
 137,
-146,
-147,
-148,
-149,
-150,
-151,
 138,
 139,
+122,
 140,
 141,
 142,
 143,
 144,
 145,
-81
+146,
+147,
+148,
+149,
+123,
+150,
+151,
+124,
+125,
+126,
+127,
+128,
+129,
+152,
+153,
+162,
+163,
+164,
+165,
+166,
+167,
+168,
+169,
+170,
+171,
+154,
+172,
+173,
+174,
+175,
+176,
+177,
+178,
+179,
+180,
+181,
+155,
+182,
+183,
+156,
+157,
+158,
+159,
+160,
+161,
+81,
+184,
+185,
+194,
+195,
+196,
+197,
+198,
+199,
+200,
+201,
+202,
+203,
+186,
+204,
+205,
+206,
+207,
+208,
+209,
+210,
+211,
+212,
+213,
+187,
+214,
+215,
+188,
+189,
+190,
+191,
+192,
+193

+ 65 - 1
compiler/x86_64/r8664stab.inc

@@ -135,6 +135,54 @@
 30,
 31,
 32,
+33,
+34,
+35,
+36,
+37,
+38,
+39,
+40,
+41,
+42,
+43,
+44,
+45,
+46,
+47,
+48,
+17,
+18,
+19,
+20,
+21,
+22,
+23,
+24,
+25,
+26,
+27,
+28,
+29,
+30,
+31,
+32,
+33,
+34,
+35,
+36,
+37,
+38,
+39,
+40,
+41,
+42,
+43,
+44,
+45,
+46,
+47,
+48,
 17,
 18,
 19,
@@ -150,4 +198,20 @@
 29,
 30,
 31,
-32
+32,
+33,
+34,
+35,
+36,
+37,
+38,
+39,
+40,
+41,
+42,
+43,
+44,
+45,
+46,
+47,
+48

+ 65 - 1
compiler/x86_64/r8664std.inc

@@ -135,6 +135,22 @@
 'xmm13',
 'xmm14',
 'xmm15',
+'xmm16',
+'xmm17',
+'xmm18',
+'xmm19',
+'xmm20',
+'xmm21',
+'xmm22',
+'xmm23',
+'xmm24',
+'xmm25',
+'xmm26',
+'xmm27',
+'xmm28',
+'xmm29',
+'xmm30',
+'xmm31',
 'ymm0',
 'ymm1',
 'ymm2',
@@ -150,4 +166,52 @@
 'ymm12',
 'ymm13',
 'ymm14',
-'ymm15'
+'ymm15',
+'ymm16',
+'ymm17',
+'ymm18',
+'ymm19',
+'ymm20',
+'ymm21',
+'ymm22',
+'ymm23',
+'ymm24',
+'ymm25',
+'ymm26',
+'ymm27',
+'ymm28',
+'ymm29',
+'ymm30',
+'ymm31',
+'zmm0',
+'zmm1',
+'zmm2',
+'zmm3',
+'zmm4',
+'zmm5',
+'zmm6',
+'zmm7',
+'zmm8',
+'zmm9',
+'zmm10',
+'zmm11',
+'zmm12',
+'zmm13',
+'zmm14',
+'zmm15',
+'zmm16',
+'zmm17',
+'zmm18',
+'zmm19',
+'zmm20',
+'zmm21',
+'zmm22',
+'zmm23',
+'zmm24',
+'zmm25',
+'zmm26',
+'zmm27',
+'zmm28',
+'zmm29',
+'zmm30',
+'zmm31'

+ 1 - 1
compiler/x86_64/x8664nop.inc

@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-2170;
+2171;

+ 9 - 2
compiler/x86_64/x8664tab.inc

@@ -11687,14 +11687,21 @@
     opcode  : A_VPADDSB;
     ops     : 3;
     optypes : (ot_xmmreg,ot_xmmreg,ot_xmmrm,ot_none);
-    code    : #241#242#248#1#236#61#80;
+    code    : #232#241#242#248#1#236#61#80;
     flags   : [if_avx,if_sandybridge]
   ),
   (
     opcode  : A_VPADDSB;
     ops     : 3;
     optypes : (ot_ymmreg,ot_ymmreg,ot_ymmrm,ot_none);
-    code    : #241#242#244#248#1#236#61#80;
+    code    : #232#241#242#244#248#1#236#61#80;
+    flags   : [if_avx2]
+  ),
+  (
+    opcode  : A_VPADDSB;
+    ops     : 3;
+    optypes : (ot_zmmreg,ot_zmmreg,ot_zmmrm,ot_none);
+    code    : #232#233#241#248#1#236#61#80;
     flags   : [if_avx2]
   ),
   (

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio