From a2e442e11149f9527c91bda73eb67e1168b5d35d Mon Sep 17 00:00:00 2001 From: florian Date: Sun, 23 Jul 2017 19:24:45 +0000 Subject: [PATCH] * keep the names of X, Y and Z in assembler files, fixes issue #32150 git-svn-id: trunk@36776 - --- .gitattributes | 1 + compiler/avr/avrreg.dat | 74 ++++++++++++++++++++------------------ compiler/avr/raavrgas.pas | 5 +-- compiler/avr/ravrcon.inc | 3 ++ compiler/avr/ravrdwa.inc | 3 ++ compiler/avr/ravrnor.inc | 2 +- compiler/avr/ravrnum.inc | 3 ++ compiler/avr/ravrrni.inc | 5 ++- compiler/avr/ravrsri.inc | 5 ++- compiler/avr/ravrsta.inc | 3 ++ compiler/avr/ravrstd.inc | 3 ++ compiler/avr/ravrsup.inc | 3 ++ compiler/utils/mkavrreg.pp | 7 ++-- tests/webtbs/tw32150.pp | 16 +++++++++ 14 files changed, 89 insertions(+), 44 deletions(-) create mode 100644 tests/webtbs/tw32150.pp diff --git a/.gitattributes b/.gitattributes index 1fa4daa839..9d04b9f7e1 100644 --- a/.gitattributes +++ b/.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 diff --git a/compiler/avr/avrreg.dat b/compiler/avr/avrreg.dat index 110d5fbe31..89288c683e 100644 --- a/compiler/avr/avrreg.dat +++ b/compiler/avr/avrreg.dat @@ -2,43 +2,47 @@ ; AVR registers ; ; layout -; ,,,,, +; ,,,,,, ; -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 diff --git a/compiler/avr/raavrgas.pas b/compiler/avr/raavrgas.pas index 4be5df5df6..0d5898929d 100644 --- a/compiler/avr/raavrgas.pas +++ b/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) ); diff --git a/compiler/avr/ravrcon.inc b/compiler/avr/ravrcon.inc index a37e8d8303..a3be0134d6 100644 --- a/compiler/avr/ravrcon.inc +++ b/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); diff --git a/compiler/avr/ravrdwa.inc b/compiler/avr/ravrdwa.inc index 12c7405d9d..034595c2d6 100644 --- a/compiler/avr/ravrdwa.inc +++ b/compiler/avr/ravrdwa.inc @@ -32,4 +32,7 @@ 29, 30, 31, +26, +28, +30, 0 diff --git a/compiler/avr/ravrnor.inc b/compiler/avr/ravrnor.inc index f91359a07a..e3fd770f33 100644 --- a/compiler/avr/ravrnor.inc +++ b/compiler/avr/ravrnor.inc @@ -1,2 +1,2 @@ { don't edit, this file is generated from avrreg.dat } -34 +37 diff --git a/compiler/avr/ravrnum.inc b/compiler/avr/ravrnum.inc index 110e693317..dc6a64e4ef 100644 --- a/compiler/avr/ravrnum.inc +++ b/compiler/avr/ravrnum.inc @@ -32,4 +32,7 @@ tregister($0100001c), tregister($0100001d), tregister($0100001e), tregister($0100001f), +tregister($0103001a), +tregister($0103001c), +tregister($0103001e), tregister($05000000) diff --git a/compiler/avr/ravrrni.inc b/compiler/avr/ravrrni.inc index c42736375d..7323bb5373 100644 --- a/compiler/avr/ravrrni.inc +++ b/compiler/avr/ravrrni.inc @@ -32,4 +32,7 @@ 30, 31, 32, -33 +33, +34, +35, +36 diff --git a/compiler/avr/ravrsri.inc b/compiler/avr/ravrsri.inc index 17f20e705a..95f9a63060 100644 --- a/compiler/avr/ravrsri.inc +++ b/compiler/avr/ravrsri.inc @@ -32,4 +32,7 @@ 8, 9, 10, -33 +36, +33, +34, +35 diff --git a/compiler/avr/ravrsta.inc b/compiler/avr/ravrsta.inc index 12c7405d9d..034595c2d6 100644 --- a/compiler/avr/ravrsta.inc +++ b/compiler/avr/ravrsta.inc @@ -32,4 +32,7 @@ 29, 30, 31, +26, +28, +30, 0 diff --git a/compiler/avr/ravrstd.inc b/compiler/avr/ravrstd.inc index f95331de3f..e9993ab4b3 100644 --- a/compiler/avr/ravrstd.inc +++ b/compiler/avr/ravrstd.inc @@ -32,4 +32,7 @@ 'r29', 'r30', 'r31', +'x', +'y', +'z', 'sreg' diff --git a/compiler/avr/ravrsup.inc b/compiler/avr/ravrsup.inc index 3a3f5e2611..276d08b38b 100644 --- a/compiler/avr/ravrsup.inc +++ b/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; diff --git a/compiler/utils/mkavrreg.pp b/compiler/utils/mkavrreg.pp index 461996d3ad..5401b42d0e 100644 --- a/compiler/utils/mkavrreg.pp +++ b/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