Adds assembly and dis-assembly support for the HPPA wide
mode, 16 bit forms of ldi, ldo, ldw and stw instructions.
This commit is contained in:
parent
ad3faf61ab
commit
b0c8c95b1e
@ -1,3 +1,10 @@
|
||||
2001-01-14 Alan Modra <alan@linuxcare.com.au>
|
||||
|
||||
* hppa.h: Describe new '<' and '>' operand types, and tidy
|
||||
existing comments.
|
||||
(pa_opcodes): Add entries for missing wide mode ldi,ldo,ldw,stw.
|
||||
Remove duplicate "ldw j(s,b),x". Sort some entries.
|
||||
|
||||
Sat Jan 13 09:56:32 MET 2001 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* i386.h (i386_optab): Fix pusha and ret templates.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Table of opcodes for the PA-RISC.
|
||||
Copyright (C) 1990, 1991, 1993, 1995, 1999, 2000
|
||||
Copyright (C) 1990, 1991, 1993, 1995, 1999, 2000, 2001
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
Contributed by the Center for Software Science at the
|
||||
@ -71,15 +71,15 @@ struct pa_opcode
|
||||
|
||||
In the args field, the following characters are unused:
|
||||
|
||||
' " - / 34 6789:;< > @'
|
||||
' C M [\] '
|
||||
' e g } '
|
||||
' " - / 34 6789:; '
|
||||
'@ C M [\] '
|
||||
'` e g } '
|
||||
|
||||
Here are all the characters:
|
||||
|
||||
' !"#$%&'()*+-,./0123456789:;<=>?@'
|
||||
'ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_'
|
||||
'abcdefghijklmnopqrstuvwxyz{|}~'
|
||||
' !"#$%&'()*+-,./0123456789:;<=>?'
|
||||
'@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_'
|
||||
'`abcdefghijklmnopqrstuvwxyz{|}~ '
|
||||
|
||||
Kinds of operands:
|
||||
x integer register field at 15.
|
||||
@ -147,7 +147,7 @@ Also these:
|
||||
the bb instruction. It's the same as r above, except the
|
||||
value is in a different location)
|
||||
B 5 bit immediate value at 10 (a bit position specified in
|
||||
the bb instruction. Similar to Q, but 64bit handling is
|
||||
the bb instruction. Similar to Q, but 64 bit handling is
|
||||
different.
|
||||
Z %r1 -- implicit target of addil instruction.
|
||||
L ,%r2 completer for new syntax branch
|
||||
@ -155,12 +155,14 @@ Also these:
|
||||
_ Destination format completer for fcnv
|
||||
h cbit for fcmp
|
||||
= gfx tests for ftest
|
||||
d 14bit offset for single precision FP long load/store.
|
||||
# 14bit offset for double precision FP load long/store.
|
||||
J Yet another 14bit offset with an unusual encoding.
|
||||
K Yet another 14bit offset with an unusual encoding.
|
||||
y 16bit offset for single precision FP long load/store (PA2.0 wide).
|
||||
& 16bit offset for double precision FP long load/store (PA2.0 wide).
|
||||
d 14 bit offset for single precision FP long load/store.
|
||||
# 14 bit offset for double precision FP load long/store.
|
||||
J Yet another 14 bit offset for load/store with ma,mb completers.
|
||||
K Yet another 14 bit offset for load/store with ma,mb completers.
|
||||
y 16 bit offset for word aligned load/store (PA2.0 wide).
|
||||
& 16 bit offset for dword aligned load/store (PA2.0 wide).
|
||||
< 16 bit offset for load/store with ma,mb completers (PA2.0 wide).
|
||||
> 16 bit offset for load/store with ma,mb completers (PA2.0 wide).
|
||||
Y %sr0,%r31 -- implicit target of be,l instruction.
|
||||
@ implicit immediate value of 0
|
||||
|
||||
@ -279,6 +281,7 @@ static const struct pa_opcode pa_opcodes[] =
|
||||
|
||||
/* Pseudo-instructions. */
|
||||
|
||||
{ "ldi", 0x34000000, 0xffe00000, "l,x", pa20w, 0},/* ldo val(r0),r */
|
||||
{ "ldi", 0x34000000, 0xffe0c000, "j,x", pa10, 0},/* ldo val(r0),r */
|
||||
|
||||
{ "call", 0xe800f000, 0xfc1ffffd, "n(b)", pa20, FLAG_STRICT},
|
||||
@ -321,36 +324,37 @@ static const struct pa_opcode pa_opcodes[] =
|
||||
{ "ldd", 0x0c0010c0, 0xfc0013c0, "cmcc5(b),t", pa20, FLAG_STRICT},
|
||||
{ "ldd", 0x50000000, 0xfc000002, "cq&(b),x", pa20w, FLAG_STRICT},
|
||||
{ "ldd", 0x50000000, 0xfc000002, "cq#(b),x", pa20, FLAG_STRICT},
|
||||
{ "ldw", 0x48000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
|
||||
{ "ldw", 0x0c000080, 0xfc0013c0, "cxccx(s,b),t", pa10, FLAG_STRICT},
|
||||
{ "ldw", 0x0c000080, 0xfc0013c0, "cxccx(b),t", pa10, FLAG_STRICT},
|
||||
{ "ldw", 0x0c0010a0, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT},
|
||||
{ "ldw", 0x0c0010a0, 0xfc1f33e0, "cocc@(b),t", pa20, FLAG_STRICT},
|
||||
{ "ldw", 0x0c001080, 0xfc0013c0, "cmcc5(s,b),t", pa10, FLAG_STRICT},
|
||||
{ "ldw", 0x0c001080, 0xfc0013c0, "cmcc5(b),t", pa10, FLAG_STRICT},
|
||||
{ "ldw", 0x4c000000, 0xfc000000, "ce<(b),x", pa20w, FLAG_STRICT},
|
||||
{ "ldw", 0x4c000000, 0xfc000000, "ceJ(s,b),x", pa10, FLAG_STRICT},
|
||||
{ "ldw", 0x4c000000, 0xfc000000, "ceJ(b),x", pa10, FLAG_STRICT},
|
||||
{ "ldw", 0x5c000004, 0xfc000006, "ce>(b),x", pa20w, FLAG_STRICT},
|
||||
{ "ldw", 0x5c000004, 0xfc000006, "ceK(s,b),x", pa20, FLAG_STRICT},
|
||||
{ "ldw", 0x5c000004, 0xfc000006, "ceK(b),x", pa20, FLAG_STRICT},
|
||||
{ "ldw", 0x48000000, 0xfc000000, "j(s,b),x", pa10, 0},
|
||||
{ "ldw", 0x48000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
|
||||
{ "ldw", 0x48000000, 0xfc000000, "j(s,b),x", pa10, 0},
|
||||
{ "ldw", 0x48000000, 0xfc000000, "j(b),x", pa10, 0},
|
||||
{ "ldh", 0x44000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
|
||||
{ "ldh", 0x0c000040, 0xfc0013c0, "cxccx(s,b),t", pa10, FLAG_STRICT},
|
||||
{ "ldh", 0x0c000040, 0xfc0013c0, "cxccx(b),t", pa10, FLAG_STRICT},
|
||||
{ "ldh", 0x0c001060, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT},
|
||||
{ "ldh", 0x0c001060, 0xfc1f33e0, "cocc@(b),t", pa20, FLAG_STRICT},
|
||||
{ "ldh", 0x0c001040, 0xfc0013c0, "cmcc5(s,b),t", pa10, FLAG_STRICT},
|
||||
{ "ldh", 0x0c001040, 0xfc0013c0, "cmcc5(b),t", pa10, FLAG_STRICT},
|
||||
{ "ldh", 0x44000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
|
||||
{ "ldh", 0x44000000, 0xfc000000, "j(s,b),x", pa10, 0},
|
||||
{ "ldh", 0x44000000, 0xfc000000, "j(b),x", pa10, 0},
|
||||
{ "ldb", 0x40000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
|
||||
{ "ldb", 0x0c000000, 0xfc0013c0, "cxccx(s,b),t", pa10, FLAG_STRICT},
|
||||
{ "ldb", 0x0c000000, 0xfc0013c0, "cxccx(b),t", pa10, FLAG_STRICT},
|
||||
{ "ldb", 0x0c001020, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT},
|
||||
{ "ldb", 0x0c001020, 0xfc1f33e0, "cocc@(b),t", pa20, FLAG_STRICT},
|
||||
{ "ldb", 0x0c001000, 0xfc0013c0, "cmcc5(s,b),t", pa10, FLAG_STRICT},
|
||||
{ "ldb", 0x0c001000, 0xfc0013c0, "cmcc5(b),t", pa10, FLAG_STRICT},
|
||||
{ "ldb", 0x40000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
|
||||
{ "ldb", 0x40000000, 0xfc000000, "j(s,b),x", pa10, 0},
|
||||
{ "ldb", 0x40000000, 0xfc000000, "j(b),x", pa10, 0},
|
||||
{ "std", 0x0c0012e0, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
|
||||
@ -359,29 +363,31 @@ static const struct pa_opcode pa_opcodes[] =
|
||||
{ "std", 0x0c0012c0, 0xfc0013c0, "cmcCx,V(b)", pa20, FLAG_STRICT},
|
||||
{ "std", 0x70000000, 0xfc000002, "cqx,&(b)", pa20w, FLAG_STRICT},
|
||||
{ "std", 0x70000000, 0xfc000002, "cqx,#(b)", pa20, FLAG_STRICT},
|
||||
{ "stw", 0x68000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
|
||||
{ "stw", 0x0c0012a0, 0xfc0013ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
|
||||
{ "stw", 0x0c0012a0, 0xfc0013ff, "cocCx,@(b)", pa20, FLAG_STRICT},
|
||||
{ "stw", 0x0c001280, 0xfc0013c0, "cmcCx,V(s,b)", pa10, FLAG_STRICT},
|
||||
{ "stw", 0x0c001280, 0xfc0013c0, "cmcCx,V(b)", pa10, FLAG_STRICT},
|
||||
{ "stw", 0x6c000000, 0xfc000000, "cex,<(b)", pa20w, FLAG_STRICT},
|
||||
{ "stw", 0x6c000000, 0xfc000000, "cex,J(s,b)", pa10, FLAG_STRICT},
|
||||
{ "stw", 0x6c000000, 0xfc000000, "cex,J(b)", pa10, FLAG_STRICT},
|
||||
{ "stw", 0x7c000004, 0xfc000006, "cex,>(b)", pa20w, FLAG_STRICT},
|
||||
{ "stw", 0x7c000004, 0xfc000006, "cex,K(s,b)", pa20, FLAG_STRICT},
|
||||
{ "stw", 0x7c000004, 0xfc000006, "cex,K(b)", pa20, FLAG_STRICT},
|
||||
{ "stw", 0x68000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
|
||||
{ "stw", 0x68000000, 0xfc000000, "x,j(s,b)", pa10, 0},
|
||||
{ "stw", 0x68000000, 0xfc000000, "x,j(b)", pa10, 0},
|
||||
{ "sth", 0x64000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
|
||||
{ "sth", 0x0c001260, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
|
||||
{ "sth", 0x0c001260, 0xfc0033ff, "cocCx,@(b)", pa20, FLAG_STRICT},
|
||||
{ "sth", 0x0c001240, 0xfc0013c0, "cmcCx,V(s,b)", pa10, FLAG_STRICT},
|
||||
{ "sth", 0x0c001240, 0xfc0013c0, "cmcCx,V(b)", pa10, FLAG_STRICT},
|
||||
{ "sth", 0x64000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
|
||||
{ "sth", 0x64000000, 0xfc000000, "x,j(s,b)", pa10, 0},
|
||||
{ "sth", 0x64000000, 0xfc000000, "x,j(b)", pa10, 0},
|
||||
{ "stb", 0x60000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
|
||||
{ "stb", 0x0c001220, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
|
||||
{ "stb", 0x0c001220, 0xfc0033ff, "cocCx,@(b)", pa20, FLAG_STRICT},
|
||||
{ "stb", 0x0c001200, 0xfc0013c0, "cmcCx,V(s,b)", pa10, FLAG_STRICT},
|
||||
{ "stb", 0x0c001200, 0xfc0013c0, "cmcCx,V(b)", pa10, FLAG_STRICT},
|
||||
{ "stb", 0x60000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
|
||||
{ "stb", 0x60000000, 0xfc000000, "x,j(s,b)", pa10, 0},
|
||||
{ "stb", 0x60000000, 0xfc000000, "x,j(b)", pa10, 0},
|
||||
{ "ldwm", 0x4c000000, 0xfc000000, "j(s,b),x", pa10, 0},
|
||||
@ -439,6 +445,7 @@ static const struct pa_opcode pa_opcodes[] =
|
||||
{ "stbys", 0x0c001300, 0xfc001fc0, "csx,V(b)", pa10, 0},
|
||||
|
||||
/* Immediate instructions. */
|
||||
{ "ldo", 0x34000000, 0xfc000000, "l(b),x", pa20w, 0},
|
||||
{ "ldo", 0x34000000, 0xfc00c000, "j(b),x", pa10, 0},
|
||||
{ "ldil", 0x20000000, 0xfc000000, "k,b", pa10, 0},
|
||||
{ "addil", 0x28000000, 0xfc000000, "k,b,Z", pa10, 0},
|
||||
|
Loading…
Reference in New Issue
Block a user