GNU as has "la %r4,8(%r3)" as an alias for "addi %r4,%r3,8", meaning
to load the address of the thing at 8(%r3). Our 'la', now 'li32',
makes an addis/ori pair to load an immediate 32-bit value. For
example, "li32 r4,
23456789" loads a big number.
%token <y_word> OP_TO_RA_RB
%token <y_word> OP_TO_RA_SI
-%token <y_word> OP_LA
+%token <y_word> OP_LI32
/* Other token types */
/* Special instructions */
-0, OP_LA, 0, "la",
+0, OP_LI32, 0, "li32",
/* Branch processor instructions (page 20) */
| OP_LEV u7 { emit4($1 | ($2<<5)); }
| OP_LIA lia { emit4($1 | $2); }
| OP_LIL lil { emit4($1 | $2); }
- | OP_LA la /* emitted in subrule */
+ | OP_LI32 li32 /* emitted in subrule */
;
c
}
;
-la
+li32
: GPR ',' expr
{
newrelo($3.typ, RELOPPC | FIXUPFLAGS);
.define .aar4
.aar4:
- la r0, .trap_earray
+ li32 r0, .trap_earray
mtspr ctr, r0 ! load CTR with trap address
lwz r0, 0(r3)
.define .cfu8
.cfu8:
- la r3, .fd_00000000
+ li32 r3, .fd_00000000
lfd f0, 0(r3) ! f0 = 0.0
lfd f1, 0(sp) ! value to be converted
- la r3, .fd_FFFFFFFF
+ li32 r3, .fd_FFFFFFFF
lfd f3, 0(r3) ! f3 = 0xFFFFFFFF
- la r3, .fd_80000000
+ li32 r3, .fd_80000000
lfd f4, 0(r3) ! f4 = 0x80000000
fsel f2, f1, f1, f0
lfd f0, 0(sp) ! load value
- la r3, pivot
+ li32 r3, pivot
lfd f1, 0(r3) ! load pivot value
fsub f0, f0, f1 ! adjust
lfd f0, 0(sp) ! load value
- la r3, pivot
+ li32 r3, pivot
lfd f1, 0(r3) ! load pivot value
fsub f0, f0, f1 ! adjust
fsubs FSREG:wo, FSREG:ro, FSREG:ro.
fmr FPR:wo, FPR:ro.
fmr FSREG:wo, FSREG:ro.
- la GPRI:wo, LABEL:ro.
lbzx GPRI:wo, GPR:ro, GPR:ro.
lbz GPRI:wo, GPRINDIRECT+GPRINDIRECTLO:ro.
lfd FPR:wo, GPRINDIRECT+GPRINDIRECTLO:ro.
lhax GPRI:wo, GPR:ro, GPR:ro.
lha GPRI:wo, GPRINDIRECT+GPRINDIRECTLO:ro.
lhz GPRI:wo, GPRINDIRECT+GPRINDIRECTLO:ro.
+ li32 GPRI:wo, LABEL:ro.
lwzu GPRI:wo, GPRINDIRECT+GPRINDIRECTLO:ro.
lwzx GPRI:wo, GPR:ro, GPR:ro.
lwz GPRI:wo, GPRINDIRECT+GPRINDIRECTLO:ro.
from LABEL to GPR
gen
COMMENT("move LABEL->GPR")
- la %2, {LABEL, %1.adr}
+ li32 %2, {LABEL, %1.adr}
/* Sign extension */
bc IFTRUE, GT, 2f
3:
- la r4, _errno
+ li32 r4, _errno
stw r3, 0(r4)
addi r3, r0, -1
bclr ALWAYS, 0, 0
addi r4, r0, 1
rlwnm r4, r4, r3, 0, 31 ! calculate trap bit
- la r5, .ignmask
+ li32 r5, .ignmask
lwz r5, 0(r5) ! load ignore mask
and. r4, r4, r5 ! compare
bclr IFFALSE, EQ, 0 ! return if non-zero
1:
- la r4, .trppc
+ li32 r4, .trppc
lwz r5, 0(r4) ! load user trap routine
or. r5, r5, r5 ! test
bc IFTRUE, EQ, fatal ! if no user trap routine, bail out
fatal:
addi r3, r0, 1
- la r4, message
+ li32 r4, message
addi r5, r0, 6
addi r0, r0, 4 ! write()
sc 0