diff options
author | Ondřej Surý <ondrej@sury.org> | 2011-02-14 13:23:51 +0100 |
---|---|---|
committer | Ondřej Surý <ondrej@sury.org> | 2011-02-14 13:23:51 +0100 |
commit | 758ff64c69e34965f8af5b2d6ffd65e8d7ab2150 (patch) | |
tree | 6d6b34f8c678862fe9b56c945a7b63f68502c245 /src/cmd/5l/asm.c | |
parent | 3e45412327a2654a77944249962b3652e6142299 (diff) | |
download | golang-upstream/2011-02-01.1.tar.gz |
Imported Upstream version 2011-02-01.1upstream/2011-02-01.1
Diffstat (limited to 'src/cmd/5l/asm.c')
-rw-r--r-- | src/cmd/5l/asm.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/cmd/5l/asm.c b/src/cmd/5l/asm.c index 7ceea59b6..34565629f 100644 --- a/src/cmd/5l/asm.c +++ b/src/cmd/5l/asm.c @@ -448,7 +448,9 @@ asmb(void) sh->type = SHT_PROGBITS; sh->flags = SHF_ALLOC; sh->addralign = 1; - elfinterp(sh, startva, linuxdynld); + if(interpreter == nil) + interpreter = linuxdynld; + elfinterp(sh, startva, interpreter); ph = newElfPhdr(); ph->type = PT_INTERP; @@ -793,7 +795,8 @@ if(debug['G']) print("%ux: %s: arm %d %d %d\n", (uint32)(p->pc), p->from.sym->na rt = 0; if(p->as == AMOVW || p->as == AMVN) r = 0; - else if(r == NREG) + else + if(r == NREG) r = rt; o1 |= rf | (r<<16) | (rt<<12); break; @@ -1558,6 +1561,10 @@ if(debug['G']) print("%ux: %s: arm %d %d %d\n", (uint32)(p->pc), p->from.sym->na o1 |= (p->from.reg<<16); o1 |= (p->to.reg<<12); break; + case 90: /* tst reg */ + o1 = oprrr(ACMP+AEND, p->scond); + o1 |= p->from.reg<<16; + break; } out[0] = o1; @@ -1709,6 +1716,8 @@ oprrr(int a, int sc) return o | (0xe<<24) | (0x0<<20) | (0xb<<8) | (1<<4); case AMOVFW+AEND: // copy FtoW return o | (0xe<<24) | (0x1<<20) | (0xb<<8) | (1<<4); + case ACMP+AEND: // cmp imm + return o | (0x3<<24) | (0x5<<20); } diag("bad rrr %d", a); prasm(curp); |