Răsfoiți Sursa

* keep the names of X, Y and Z in assembler files, fixes issue #32150

git-svn-id: trunk@36776 -
florian 8 ani în urmă
părinte
comite
a2e442e111

+ 1 - 0
.gitattributes

@@ -15634,6 +15634,7 @@ tests/webtbs/tw32111.pp svneol=native#text/pascal
 tests/webtbs/tw32118.pp svneol=native#text/pascal
 tests/webtbs/tw3212.pp svneol=native#text/plain
 tests/webtbs/tw3214.pp svneol=native#text/plain
+tests/webtbs/tw32150.pp svneol=native#text/pascal
 tests/webtbs/tw3216.pp svneol=native#text/plain
 tests/webtbs/tw3217.pp svneol=native#text/plain
 tests/webtbs/tw3222.pp svneol=native#text/plain

+ 39 - 35
compiler/avr/avrreg.dat

@@ -2,43 +2,47 @@
 ; AVR registers
 ;
 ; layout
-; <name>,<type>,<value>,<stdname>,<stab idx>,<dwarf idx>
+; <name>,<type>,<subreg>,<value>,<stdname>,<stab idx>,<dwarf idx>
 ;
-NO,$00,$00,INVALID,-1,-1
+NO,$00,$00,$00,INVALID,-1,-1
 
-R0,$01,$00,r0,0,0
-R1,$01,$01,r1,1,1
-R2,$01,$02,r2,2,2
-R3,$01,$03,r3,3,3
-R4,$01,$04,r4,4,4
-R5,$01,$05,r5,5,5
-R6,$01,$06,r6,6,6
-R7,$01,$07,r7,7,7
-R8,$01,$08,r8,8,8
-R9,$01,$09,r9,9,9
-R10,$01,$0a,r10,10,10
-R11,$01,$0b,r11,11,11
-R12,$01,$0c,r12,12,12
-R13,$01,$0d,r13,13,13
-R14,$01,$0e,r14,14,14
-R15,$01,$0f,r15,15,15
-R16,$01,$10,r16,16,16
-R17,$01,$11,r17,17,17
-R18,$01,$12,r18,18,18
-R19,$01,$13,r19,19,19
-R20,$01,$14,r20,20,20
-R21,$01,$15,r21,21,21
-R22,$01,$16,r22,22,22
-R23,$01,$17,r23,23,23
-R24,$01,$18,r24,24,24
-R25,$01,$19,r25,25,25
-R26,$01,$1a,r26,26,26
-R27,$01,$1b,r27,27,27
-R28,$01,$1c,r28,28,28
-R29,$01,$1d,r29,29,29
-R30,$01,$1e,r30,30,30
-R31,$01,$1f,r31,31,31
+R0,$01,$00,$00,r0,0,0
+R1,$01,$00,$01,r1,1,1
+R2,$01,$00,$02,r2,2,2
+R3,$01,$00,$03,r3,3,3
+R4,$01,$00,$04,r4,4,4
+R5,$01,$00,$05,r5,5,5
+R6,$01,$00,$06,r6,6,6
+R7,$01,$00,$07,r7,7,7
+R8,$01,$00,$08,r8,8,8
+R9,$01,$00,$09,r9,9,9
+R10,$01,$00,$0a,r10,10,10
+R11,$01,$00,$0b,r11,11,11
+R12,$01,$00,$0c,r12,12,12
+R13,$01,$00,$0d,r13,13,13
+R14,$01,$00,$0e,r14,14,14
+R15,$01,$00,$0f,r15,15,15
+R16,$01,$00,$10,r16,16,16
+R17,$01,$00,$11,r17,17,17
+R18,$01,$00,$12,r18,18,18
+R19,$01,$00,$13,r19,19,19
+R20,$01,$00,$14,r20,20,20
+R21,$01,$00,$15,r21,21,21
+R22,$01,$00,$16,r22,22,22
+R23,$01,$00,$17,r23,23,23
+R24,$01,$00,$18,r24,24,24
+R25,$01,$00,$19,r25,25,25
+R26,$01,$00,$1a,r26,26,26
+R27,$01,$00,$1b,r27,27,27
+R28,$01,$00,$1c,r28,28,28
+R29,$01,$00,$1d,r29,29,29
+R30,$01,$00,$1e,r30,30,30
+R31,$01,$00,$1f,r31,31,31
 
-SREG,$05,$00,sreg,0,0
+X,$01,$03,$1a,x,26,26
+Y,$01,$03,$1c,y,28,28
+Z,$01,$03,$1e,z,30,30
+
+SREG,$05,$00,$00,sreg,0,0
 
 

+ 1 - 4
compiler/avr/raavrgas.pas

@@ -71,14 +71,11 @@ Unit raavrgas;
         end;
 
       const
-        extraregs : array[0..8] of treg2str = (
-          (name: 'X'; reg : NR_R26),
+        extraregs : array[0..5] of treg2str = (
           (name: 'XL'; reg : NR_R26),
           (name: 'XH'; reg : NR_R27),
-          (name: 'Y'; reg : NR_R28),
           (name: 'YL'; reg : NR_R28),
           (name: 'YH'; reg : NR_R29),
-          (name: 'Z'; reg : NR_R30),
           (name: 'ZL'; reg : NR_R30),
           (name: 'ZH'; reg : NR_R31)
         );

+ 3 - 0
compiler/avr/ravrcon.inc

@@ -32,4 +32,7 @@ NR_R28 = tregister($0100001c);
 NR_R29 = tregister($0100001d);
 NR_R30 = tregister($0100001e);
 NR_R31 = tregister($0100001f);
+NR_X = tregister($0103001a);
+NR_Y = tregister($0103001c);
+NR_Z = tregister($0103001e);
 NR_SREG = tregister($05000000);

+ 3 - 0
compiler/avr/ravrdwa.inc

@@ -32,4 +32,7 @@
 29,
 30,
 31,
+26,
+28,
+30,
 0

+ 1 - 1
compiler/avr/ravrnor.inc

@@ -1,2 +1,2 @@
 { don't edit, this file is generated from avrreg.dat }
-34
+37

+ 3 - 0
compiler/avr/ravrnum.inc

@@ -32,4 +32,7 @@ tregister($0100001c),
 tregister($0100001d),
 tregister($0100001e),
 tregister($0100001f),
+tregister($0103001a),
+tregister($0103001c),
+tregister($0103001e),
 tregister($05000000)

+ 4 - 1
compiler/avr/ravrrni.inc

@@ -32,4 +32,7 @@
 30,
 31,
 32,
-33
+33,
+34,
+35,
+36

+ 4 - 1
compiler/avr/ravrsri.inc

@@ -32,4 +32,7 @@
 8,
 9,
 10,
-33
+36,
+33,
+34,
+35

+ 3 - 0
compiler/avr/ravrsta.inc

@@ -32,4 +32,7 @@
 29,
 30,
 31,
+26,
+28,
+30,
 0

+ 3 - 0
compiler/avr/ravrstd.inc

@@ -32,4 +32,7 @@
 'r29',
 'r30',
 'r31',
+'x',
+'y',
+'z',
 'sreg'

+ 3 - 0
compiler/avr/ravrsup.inc

@@ -32,4 +32,7 @@ RS_R28 = $1c;
 RS_R29 = $1d;
 RS_R30 = $1e;
 RS_R31 = $1f;
+RS_X = $1a;
+RS_Y = $1c;
+RS_Z = $1e;
 RS_SREG = $00;

+ 5 - 2
compiler/utils/mkavrreg.pp

@@ -13,7 +13,7 @@
 
  **********************************************************************}
 {$mode objfpc}
-program mkspreg;
+program mkavrreg;
 
 const Version = '1.00';
       max_regcount = 200;
@@ -26,6 +26,7 @@ var s : string;
     names,
     regtypes,
     supregs,
+    subregs,
     numbers,
     stdnames,
     stabs,dwarf : array[0..max_regcount-1] of string[63];
@@ -170,6 +171,8 @@ begin
         readcomma;
         regtypes[regcount]:=readstr;
         readcomma;
+        subregs[regcount]:=readstr;
+        readcomma;
         supregs[regcount]:=readstr;
         readcomma;
         stdnames[regcount]:=readstr;
@@ -184,7 +187,7 @@ begin
             writeln('Line: "',s,'"');
             halt(1);
           end;
-        numbers[regcount]:=regtypes[regcount]+'0000'+copy(supregs[regcount],2,255);
+        numbers[regcount]:=regtypes[regcount]+copy(subregs[regcount],2,255)+'00'+copy(supregs[regcount],2,255);
         if i<length(s) then
           begin
             writeln('Extra chars at end of line, at line ',line);

+ 16 - 0
tests/webtbs/tw32150.pp

@@ -0,0 +1,16 @@
+{ %CPU=avr }
+{$mode objfpc}
+program intmathtest;
+
+// Pointer to caller supplied variable in R24:R25
+procedure test(out x: byte); assembler; nostackframe;
+asm
+  movw R30, R24
+  st Z, R1
+end;
+
+var a8: byte;
+
+begin
+  test(a8);
+end.