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