diff options
author | Alan Modra <amodra@gmail.com> | 2003-06-10 07:44:11 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2003-06-10 07:44:11 +0000 |
commit | adadcc0cc96a9373f7dfb9b7ca3c57d630872730 (patch) | |
tree | 00f2f222425404d217e030d6347b5a652b41b802 /gas/config | |
parent | 2a93846b50ab8ecbbcc7775de29f3494889cb3f9 (diff) | |
download | gdb-adadcc0cc96a9373f7dfb9b7ca3c57d630872730.zip gdb-adadcc0cc96a9373f7dfb9b7ca3c57d630872730.tar.gz gdb-adadcc0cc96a9373f7dfb9b7ca3c57d630872730.tar.bz2 |
Add "attn", "lq" and "stq" power4 insns.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-ppc.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index 93739e0..a91420a 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -2447,7 +2447,7 @@ md_assemble (str) } if (ppc_obj64 - && (operand->flags & PPC_OPERAND_DS) != 0) + && (operand->flags & (PPC_OPERAND_DS | PPC_OPERAND_DQ)) != 0) { switch (reloc) { @@ -5714,13 +5714,18 @@ md_apply_fix3 (fixP, valP, seg) abort (); { unsigned char *where = fixP->fx_frag->fr_literal + fixP->fx_where; - unsigned long val; + long val, mask; if (target_big_endian) - val = bfd_getb16 (where); + val = bfd_getb32 (where - 2); else - val = bfd_getl16 (where); - val |= (value & 0xfffc); + val = bfd_getl32 (where); + mask = 0xfffc; + /* lq insns reserve the four lsbs. */ + if ((ppc_cpu & PPC_OPCODE_POWER4) != 0 + && (val & (0x3f << 26)) == (56 << 26)) + mask = 0xfff0; + val |= value & mask; if (target_big_endian) bfd_putb16 ((bfd_vma) val, where); else |