diff --git a/src/cmd/as/as.c b/src/cmd/as/as.c index 6f30100..f63e80a 100644 --- a/src/cmd/as/as.c +++ b/src/cmd/as/as.c @@ -1244,7 +1244,7 @@ void emitword (w, r, clobber_reg) reorder_word = w; reorder_rel = *r; reorder_full = 1; - reorder_clobber = clobber_reg & 15; + reorder_clobber = clobber_reg & 31; } else { fputword (w, sfile[segm]); fputrel (r, rfile[segm]); @@ -1260,11 +1260,12 @@ void emit_li (opcode, relinfo) register struct reloc *relinfo; { register unsigned value; - int cval, segment; + int cval, segment, reg; if (getlex (&cval) != ',') uerror ("comma expected"); value = getexpr (&segment); + reg = opcode >> 16; if (segment != SABS) uerror ("absolute value required"); if (value <= 0xffff) { @@ -1279,10 +1280,10 @@ void emit_li (opcode, relinfo) } else { /* lui d, value[31:16] * ori d, d, value[15:0]) */ - emitword (opcode | 0x3c000000 | (value >> 16), &relabs, value >> 16); + emitword (opcode | 0x3c000000 | (value >> 16), &relabs, reg); opcode |= 0x34000000 | (opcode & 0x1f0000) << 5 | (value & 0xffff); } - emitword (opcode, relinfo, value >> 16); + emitword (opcode, relinfo, reg); } /* diff --git a/src/cmd/smlrc/cgmips.c b/src/cmd/smlrc/cgmips.c index c161cf2..b69b3db 100644 --- a/src/cmd/smlrc/cgmips.c +++ b/src/cmd/smlrc/cgmips.c @@ -38,7 +38,7 @@ either expressed or implied, of the FreeBSD Project. /*****************************************************************************/ // Works around bugs in RetroBSD's as instruction reordering -#define REORDER_WORKAROUND +//#define REORDER_WORKAROUND STATIC void GenInit(void) diff --git a/sys/pic32/startup.S b/sys/pic32/startup.S index e2c17b9..8a9891f 100644 --- a/sys/pic32/startup.S +++ b/sys/pic32/startup.S @@ -314,7 +314,7 @@ icode: etcinit: .ascii "/sbin/init\0" initflags: - .ascii "-\0" # ASCII initflags + .ascii "-\0" # ASCII initflags argv: .word etcinit + 6 - icode + UBASE # address of "init\0" .word initflags - icode + UBASE # init options