aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpu/ChangeLog12
-rw-r--r--cpu/frv.cpu355
-rw-r--r--cpu/frv.opc86
3 files changed, 288 insertions, 165 deletions
diff --git a/cpu/ChangeLog b/cpu/ChangeLog
index 14e5299..e95c3e4 100644
--- a/cpu/ChangeLog
+++ b/cpu/ChangeLog
@@ -1,3 +1,15 @@
+2003-09-03 Dave Brolley <brolley@redhat.com>
+
+ * frv.opc (parse_A, parse_A0, parse_A1): New parse handlers.
+ * frv.cpu (UNIT): Add IALL, FMALL, FMLOW, STORE, SCAN, DCPL, MDUALACC,
+ MCLRACC-1.
+ (A): Removed operand.
+ (A0,A1): New operands replace operand A.
+ (mnop): Now a real insn
+ (mclracc): Removed insn.
+ (mclracc-0, mclracc-1): New insns replace mclracc.
+ (all insns): Use new UNIT attributes.
+
2003-08-21 Nick Clifton <nickc@redhat.com>
* frv.cpu (mbtoh): Replace input parameter to u-media-dual-expand
diff --git a/cpu/frv.cpu b/cpu/frv.cpu
index 86eb067..a97e7be 100644
--- a/cpu/frv.cpu
+++ b/cpu/frv.cpu
@@ -931,15 +931,23 @@
(type enum)
(name UNIT)
(comment "parallel execution pipeline selection")
- ; The order of declaration is significant. Keep variations on the same unit
- ; together and keep the '01' variation last within each unit.
+ ; The order of declaration is significant.
+ ; See the *_unit_mapping tables in frv.opc
+ ; Keep variations on the same unit together.
+ ; Keep the '01' variant immediately after the '1' variant in each unit.
+ ; Keep the 'ALL' variations immediately after the last numbered variant in each unit.
(values NIL
- I0 I1 I01
- FM0 FM1 FM01
+ I0 I1 I01 IALL
+ FM0 FM1 FM01 FMALL FMLOW
B0 B1 B01
C
MULT-DIV ; multiply/division slotted differently on different machines
LOAD ; loads slotted differently on different machines
+ STORE ; store slotted differently on different machines
+ SCAN ; scan, scani slotted differently on different machines
+ DCPL ; dcpl slotted differently on different machines
+ MDUALACC ; media dual acc slotted differently on different machines
+ MCLRACC-1; mclracc A==1 slotted differently on different machines
NUM_UNITS
)
)
@@ -2221,13 +2229,32 @@
(dnop LI "link indicator" () h-uint f-LI)
(dnop lock "cache lock indicator" (HASH-PREFIX) h-uint f-lock)
(dnop debug "debug mode indicator" (HASH-PREFIX) h-uint f-debug)
-(dnop A "all accumulator indicator" (HASH-PREFIX) h-uint f-A)
(dnop ae "all entries indicator" (HASH-PREFIX) h-uint f-ae)
(dnop label16 "18 bit pc relative address" () h-iaddr f-label16)
(dnop label24 "26 bit pc relative address" () h-iaddr f-label24)
(define-operand
+ (name A0)
+ (comment "A==0 operand of mclracc")
+ (attrs)
+ (type h-uint)
+ (index f-A)
+ (mode USI)
+ (handlers (parse "A0"))
+)
+
+(define-operand
+ (name A1)
+ (comment "A==1 operand of mclracc")
+ (attrs)
+ (type h-uint)
+ (index f-A)
+ (mode USI)
+ (handlers (parse "A1"))
+)
+
+(define-operand
(name FRintieven)
(comment "(even) source register 1")
(attrs)
@@ -2447,15 +2474,15 @@
(trunc BI (and icc #x1))
)
-; FRV specific insn attributes:
+; FRV insns
+;
;
-
; Format: INT, Logic, Shift r-r
;
(define-pmacro (int-logic-r-r name operation op ope comment)
(dni name
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
(.str name "$pack $GRi,$GRj,$GRk")
(+ pack GRk op GRi (ICCi_1-null) ope GRj)
(set GRk (operation GRi GRj))
@@ -2472,7 +2499,7 @@
(dni not
("not")
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
("not$pack $GRj,$GRk")
(+ pack GRk OP_01 (rs-null) (ICCi_1-null) OPE2_06 GRj)
(set GRk (inv GRj))
@@ -2554,7 +2581,7 @@
(define-pmacro (int-shift-r-r name op ope comment)
(dni name
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
(.str name "$pack $GRi,$GRj,$GRk")
(+ pack GRk op GRi (ICCi_1-null) ope GRj)
(set GRk (name GRi (and GRj #x1f)))
@@ -2576,7 +2603,7 @@
(dni scan
"scan"
- ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT SCAN) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
"scan$pack $GRi,$GRj,$GRk"
(+ pack GRk OP_0B GRi (ICCi_1-null) OPE2_00 GRj)
(scan-semantics GRi GRj GRk)
@@ -2589,7 +2616,7 @@
(define-pmacro (conditional-int-logic name operation op ope comment)
(dni name
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
(.str name "$pack $GRi,$GRj,$GRk,$CCi,$cond")
(+ pack GRk op GRi CCi cond ope GRj)
(if (eq CCi (or cond 2))
@@ -2607,7 +2634,7 @@
(dni cnot
"conditional not"
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
"cnot$pack $GRj,$GRk,$CCi,$cond"
(+ pack GRk OP_5A (rs-null) CCi cond OPE4_3 GRj)
(if (eq CCi (or cond 2))
@@ -2658,7 +2685,7 @@
(define-pmacro (conditional-shift name operation op ope comment)
(dni name
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
(.str name "$pack $GRi,$GRj,$GRk,$CCi,$cond")
(+ pack GRk op GRi CCi cond ope GRj)
(if (eq CCi (or cond 2))
@@ -2674,7 +2701,7 @@
(dni cscan
"conditional scan"
- ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+ ((UNIT SCAN) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
"cscan$pack $GRi,$GRj,$GRk,$CCi,$cond"
(+ pack GRk OP_65 GRi CCi cond OPE4_3 GRj)
(if (eq CCi (or cond 2))
@@ -2701,7 +2728,7 @@
(define-pmacro (int-arith-cc-r-r name operation op ope comment)
(dni name
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
(.str name "$pack $GRi,$GRj,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 ope GRj)
(int-arith-cc-semantics operation ICCi_1)
@@ -2723,7 +2750,7 @@
(define-pmacro (int-logic-cc-r-r name op ope comment)
(dni (.sym name cc)
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
(.str (.sym name cc) "$pack $GRi,$GRj,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 ope GRj)
(int-logic-cc-semantics name ICCi_1)
@@ -2750,7 +2777,7 @@
(define-pmacro (int-shift-cc-r-r name l-r op ope comment)
(dni (.sym name cc)
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
(.str (.sym name cc) "$pack $GRi,$GRj,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 ope GRj)
(int-shift-cc-semantics name l-r ICCi_1)
@@ -2794,7 +2821,7 @@
(define-pmacro (conditional-int-arith-cc name operation op ope comment)
(dni name
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
(.str name "$pack $GRi,$GRj,$GRk,$CCi,$cond")
(+ pack GRk op GRi CCi cond ope GRj)
(if (eq CCi (or cond 2))
@@ -2823,7 +2850,7 @@
(define-pmacro (conditional-int-logic-cc name operation op ope comment)
(dni name
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
(.str name "$pack $GRi,$GRj,$GRk,$CCi,$cond")
(+ pack GRk op GRi CCi cond ope GRj)
(if (eq CCi (or cond 2))
@@ -2841,7 +2868,7 @@
(define-pmacro (conditional-int-shift-cc name l-r op ope comment)
(dni (.sym c name cc)
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
(.str (.sym c name cc) "$pack $GRi,$GRj,$GRk,$CCi,$cond")
(+ pack GRk op GRi CCi cond ope GRj)
(if (eq CCi (or cond 2))
@@ -2861,7 +2888,7 @@
(define-pmacro (int-arith-x-r-r name operation op ope comment)
(dni name
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
(.str name "$pack $GRi,$GRj,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 ope GRj)
(set GRk ((.sym operation c) GRi GRj (cbit ICCi_1)))
@@ -2876,7 +2903,7 @@
(define-pmacro (int-arith-x-cc-r-r name operation op ope comment)
(dni name
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
(.str name "$pack $GRi,$GRj,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 ope GRj)
(sequence ((WI tmp) (QI cc))
@@ -2900,7 +2927,7 @@
(define-pmacro (int-logic-r-simm name operation op comment)
(dni name
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
(.str name "$pack $GRi,$s12,$GRk")
(+ pack GRk op GRi s12)
(set GRk (operation GRi s12))
@@ -2987,7 +3014,7 @@
(define-pmacro (int-shift-r-simm name op comment)
(dni (.sym name i)
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
(.str (.sym name i) "$pack $GRi,$s12,$GRk")
(+ pack GRk op GRi s12)
(set GRk (name GRi (and s12 #x1f)))
@@ -3002,7 +3029,7 @@
(dni scani
"scan immediate"
- ((UNIT MULT-DIV) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT SCAN) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
"scani$pack $GRi,$s12,$GRk"
(+ pack GRk OP_47 GRi s12)
(scan-semantics GRi s12 GRk)
@@ -3015,7 +3042,7 @@
(define-pmacro (int-arith-cc-r-simm name operation op comment)
(dni name
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
(.str name "$pack $GRi,$s10,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 s10)
(sequence ((BI tmp) (QI cc) (SI result))
@@ -3039,7 +3066,7 @@
(define-pmacro (int-logic-cc-r-simm name op comment)
(dni (.sym name icc)
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
(.str (.sym name icc) "$pack $GRi,$s10,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 s10)
(sequence ((SI tmp))
@@ -3073,7 +3100,7 @@
(define-pmacro (int-shift-cc-r-simm name l-r op comment)
(dni (.sym name icc)
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
(.str (.sym name icc) "$pack $GRi,$s10,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 s10)
(sequence ((WI shift) (SI tmp) (QI cc))
@@ -3096,7 +3123,7 @@
(define-pmacro (int-arith-x-r-simm name operation op comment)
(dni name
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
(.str name "$pack $GRi,$s10,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 s10)
(set GRk ((.sym operation c) GRi s10 (cbit ICCi_1)))
@@ -3111,7 +3138,7 @@
(define-pmacro (int-arith-x-cc-r-simm name operation op comment)
(dni name
(comment)
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
(.str name "$pack $GRi,$s10,$GRk,$ICCi_1")
(+ pack GRk op GRi ICCi_1 s10)
(sequence ((WI tmp) (QI cc))
@@ -3134,7 +3161,7 @@
(dni cmpb
"Compare bytes"
- ((UNIT I01) (FR400-MAJOR I-1) (MACH fr400))
+ ((UNIT IALL) (FR400-MAJOR I-1) (MACH fr400))
"cmpb$pack $GRi,$GRj,$ICCi_1"
(+ pack (GRk-null) OP_00 GRi ICCi_1 OPE2_0C GRj)
(sequence ((QI cc))
@@ -3148,7 +3175,7 @@
(dni cmpba
"OR of Compare bytes"
- ((UNIT I01) (FR400-MAJOR I-1) (MACH fr400))
+ ((UNIT IALL) (FR400-MAJOR I-1) (MACH fr400))
"cmpba$pack $GRi,$GRj,$ICCi_1"
(+ pack (GRk-null) OP_00 GRi ICCi_1 OPE2_0D GRj)
(sequence ((QI cc))
@@ -3168,7 +3195,7 @@
;
(dni setlo
"set low order bits"
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
"setlo$pack $ulo16,$GRklo"
(+ pack GRk OP_3D (misc-null-4) u16)
(set GRklo u16)
@@ -3178,7 +3205,7 @@
(dni sethi
"set high order bits"
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
"sethi$pack $uhi16,$GRkhi"
(+ pack GRkhi OP_3E (misc-null-4) u16)
(set GRkhi u16)
@@ -3188,7 +3215,7 @@
(dni setlos
"set low order bits and extend sign"
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
"setlos$pack $slo16,$GRk"
(+ pack GRk OP_3F (misc-null-4) s16)
(set GRk s16)
@@ -3816,7 +3843,7 @@
(define-pmacro (store-r-r name mode op ope reg attr profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
+ ((UNIT STORE) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
(.str name "$pack $" reg "k,@($GRi,$GRj)")
(+ pack (.sym reg k) op GRi ope GRj)
(c-call VOID (.str "@cpu@_write_mem_" mode)
@@ -3850,7 +3877,7 @@
(define-pmacro (r-store name mode op ope reg size is_float profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (MACH frv))
+ ((UNIT STORE) (FR500-MAJOR I-3) (MACH frv))
(.str name "$pack $" reg "k,@($GRi,$GRj)")
(+ pack (.sym reg k) op GRi ope GRj)
(sequence ((WI address))
@@ -3889,7 +3916,7 @@
(define-pmacro (store-double-r-r name mode op ope regtype attr profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
+ ((UNIT STORE) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
(.str name "$pack $" regtype "k,@($GRi,$GRj)")
(+ pack (.sym regtype k) op GRi ope GRj)
(sequence ((WI address))
@@ -3912,7 +3939,7 @@
name mode op ope regtype is_float attr profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (MACH frv) attr)
+ ((UNIT STORE) (FR500-MAJOR I-3) (MACH frv) attr)
(.str name "$pack $" regtype "k,@($GRi,$GRj)")
(+ pack (.sym regtype k) op GRi ope GRj)
(sequence ((WI address))
@@ -3940,7 +3967,7 @@
(define-pmacro (store-quad-r-r name op ope regtype attr profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (MACH frv) attr)
+ ((UNIT STORE) (FR500-MAJOR I-3) (MACH frv) attr)
(.str name "$pack $" regtype "k,@($GRi,$GRj)")
(+ pack (.sym regtype k) op GRi ope GRj)
(sequence ((WI address))
@@ -3960,7 +3987,7 @@
(define-pmacro (r-store-quad name op ope regtype is_float attr profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (MACH frv) attr)
+ ((UNIT STORE) (FR500-MAJOR I-3) (MACH frv) attr)
(.str name "$pack $" regtype "k,@($GRi,$GRj)")
(+ pack (.sym regtype k) op GRi ope GRj)
(sequence ((WI address))
@@ -3979,7 +4006,7 @@
(define-pmacro (store-r-r-u name mode op ope regtype attr profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
+ ((UNIT STORE) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
(.str name "$pack $" regtype "k,@($GRi,$GRj)")
(+ pack (.sym regtype k) op GRi ope GRj)
(sequence ((UWI address))
@@ -4018,7 +4045,7 @@
name mode op ope regtype attr profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
+ ((UNIT STORE) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
(.str name "$pack $" regtype "k,@($GRi,$GRj)")
(+ pack (.sym regtype k) op GRi ope GRj)
(sequence ((WI address))
@@ -4040,7 +4067,7 @@
(define-pmacro (store-quad-r-r-u name op ope regtype attr profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (MACH frv) attr)
+ ((UNIT STORE) (FR500-MAJOR I-3) (MACH frv) attr)
(.str name "$pack $" regtype "k,@($GRi,$GRj)")
(+ pack (.sym regtype k) op GRi ope GRj)
(sequence ((WI address))
@@ -4221,7 +4248,7 @@
(define-pmacro (conditional-store name mode op ope regtype profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) CONDITIONAL)
+ ((UNIT STORE) (FR500-MAJOR I-3) (FR400-MAJOR I-3) CONDITIONAL)
(.str name "$pack $" regtype "k,@($GRi,$GRj),$CCi,$cond")
(+ pack (.sym regtype k) op GRi CCi cond ope GRj)
(if (eq CCi (or cond 2))
@@ -4255,7 +4282,7 @@
name mode op ope regtype attr profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) CONDITIONAL attr)
+ ((UNIT STORE) (FR500-MAJOR I-3) (FR400-MAJOR I-3) CONDITIONAL attr)
(.str name "$pack $" regtype "k,@($GRi,$GRj),$CCi,$cond")
(+ pack (.sym regtype k) op GRi CCi cond ope GRj)
(if (eq CCi (or cond 2))
@@ -4274,7 +4301,7 @@
(dni cstq
"conditionally store quad word"
- ((UNIT I0) (FR500-MAJOR I-3) (MACH frv) CONDITIONAL)
+ ((UNIT STORE) (FR500-MAJOR I-3) (MACH frv) CONDITIONAL)
"cstq$pack $GRk,@($GRi,$GRj),$CCi,$cond"
(+ pack GRk OP_65 GRi CCi cond OPE4_0 GRj)
(if (eq CCi (or cond 2))
@@ -4287,7 +4314,7 @@
name mode op ope regtype attr profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) CONDITIONAL attr)
+ ((UNIT STORE) (FR500-MAJOR I-3) (FR400-MAJOR I-3) CONDITIONAL attr)
(.str name "$pack $" regtype "k,@($GRi,$GRj),$CCi,$cond")
(+ pack (.sym regtype k) op GRi CCi cond ope GRj)
(if (eq CCi (or cond 2))
@@ -4324,7 +4351,7 @@
name mode op ope regtype attr profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) CONDITIONAL attr)
+ ((UNIT STORE) (FR500-MAJOR I-3) (FR400-MAJOR I-3) CONDITIONAL attr)
(.str name "$pack $" regtype "k,@($GRi,$GRj),$CCi,$cond")
(+ pack (.sym regtype k) op GRi CCi cond ope GRj)
(if (eq CCi (or cond 2))
@@ -4346,7 +4373,7 @@
(define-pmacro (store-r-simm name mode op regtype attr profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
+ ((UNIT STORE) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
(.str name "$pack $" regtype "k,@($GRi,$d12)")
(+ pack (.sym regtype k) op GRi d12)
(c-call VOID (.str "@cpu@_write_mem_" mode)
@@ -4378,7 +4405,7 @@
(define-pmacro (store-double-r-simm name mode op regtype attr profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
+ ((UNIT STORE) (FR500-MAJOR I-3) (FR400-MAJOR I-3) attr)
(.str name "$pack $" regtype "k,@($GRi,$d12)")
(+ pack (.sym regtype k) op GRi d12)
(sequence ((WI address))
@@ -4397,7 +4424,7 @@
(define-pmacro (store-quad-r-simm name op regtype attr profile comment)
(dni name
(comment)
- ((UNIT I0) (FR500-MAJOR I-3) (MACH frv) attr)
+ ((UNIT STORE) (FR500-MAJOR I-3) (MACH frv) attr)
(.str name "$pack $" regtype "k,@($GRi,$d12)")
(+ pack (.sym regtype k) op GRi d12)
(sequence ((WI address))
@@ -5638,10 +5665,10 @@
(invalidate-TLB itlbi itlbi OP_03 OPE1_33 "invalidate insn TLB")
(invalidate-TLB dtlbi dtlbi OP_03 OPE1_37 "invalidate data TLB")
-(define-pmacro (cache-preload name cache op ope profile comment)
+(define-pmacro (cache-preload name cache pipe op ope profile comment)
(dni name
(comment)
- ((UNIT C) (FR500-MAJOR C-2) (FR400-MAJOR C-2))
+ ((UNIT pipe) (FR500-MAJOR C-2) (FR400-MAJOR C-2))
(.str name "$pack $GRi,$GRj,$lock")
(+ pack (misc-null-1) lock op GRi ope GRj)
(c-call VOID (.str "@cpu@_" cache "_cache_preload") GRi GRj lock)
@@ -5649,10 +5676,10 @@
)
)
-(cache-preload icpl insn OP_03 OPE1_30
+(cache-preload icpl insn C OP_03 OPE1_30
((fr400 (unit u-icpl)) (fr500 (unit u-icpl)))
"preload insn cache")
-(cache-preload dcpl data OP_03 OPE1_34
+(cache-preload dcpl data DCPL OP_03 OPE1_34
((fr400 (unit u-dcpl)) (fr500 (unit u-dcpl)))
"preload data cache")
@@ -5775,7 +5802,7 @@
name op ope conv mode src targ attr comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,frv) attr)
+ ((UNIT FMALL) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,frv) attr)
(.str name "$pack $" src ",$" targ)
(+ pack targ op (rs-null) ope src)
(set targ (conv mode src))
@@ -5792,7 +5819,7 @@
name op ope conv mode src src_hw targ targ_hw attr comment)
(dni name
(comment)
- ((MACH frv) (UNIT FM01) (FR500-MAJOR F-1) attr)
+ ((MACH frv) (UNIT FMALL) (FR500-MAJOR F-1) attr)
(.str name "$pack $" src ",$" targ)
(+ pack targ op (rs-null) ope src)
(sequence ()
@@ -5810,7 +5837,7 @@
name op ope conv mode src src_hw targ targ_hw attr comment)
(dni name
(comment)
- ((MACH frv) (UNIT FM01) (FR500-MAJOR F-1) NON-EXCEPTING attr)
+ ((MACH frv) (UNIT FMALL) (FR500-MAJOR F-1) NON-EXCEPTING attr)
(.str name "$pack $" src ",$" targ)
(+ pack targ op (rs-null) ope src)
(sequence ()
@@ -5830,7 +5857,7 @@
name op ope conv mode src targ comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,frv))
+ ((UNIT FMALL) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,frv))
(.str name "$pack $" src ",$" targ ",$CCi,$cond")
(+ pack targ op (rs-null) CCi cond ope src)
(if (eq CCi (or cond 2))
@@ -5846,7 +5873,7 @@
name op ope conv mode src targ comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,frv))
+ ((UNIT FMALL) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,frv))
(.str name "$pack $" src ",$" targ)
(+ pack targ op (rs-null) ope src)
(sequence ()
@@ -5873,7 +5900,7 @@
(dni fdmovs
"Dual move single float"
- ((MACH frv) (UNIT FM01) (FR500-MAJOR F-1))
+ ((MACH frv) (UNIT FMALL) (FR500-MAJOR F-1))
"fdmovs$pack $FRj,$FRk"
(+ pack FRk OP_79 (rs-null) OPE1_12 FRj)
(sequence ()
@@ -5892,7 +5919,7 @@
(define-pmacro (floating-point-neg name src targ op ope attr comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR F-1) attr)
+ ((UNIT FMALL) (FR500-MAJOR F-1) attr)
(.str name "$pack $" src ",$" targ)
(+ pack src op (rs-null) ope targ)
(set targ (neg src))
@@ -5905,7 +5932,7 @@
(dni fdnegs
"Floating point dual negate, single"
- ((MACH frv) (UNIT FM01) (FR500-MAJOR F-1))
+ ((MACH frv) (UNIT FMALL) (FR500-MAJOR F-1))
"fdnegs$pack $FRj,$FRk"
(+ pack FRk OP_79 (rs-null) OPE1_13 FRj)
(sequence ()
@@ -5916,7 +5943,7 @@
(dni cfnegs
"Conditional floating point negate, single"
- ((UNIT FM01) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,frv))
+ ((UNIT FMALL) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,frv))
"cfnegs$pack $FRj,$FRk,$CCi,$cond"
(+ pack FRj OP_6C (rs-null) CCi cond OPE4_1 FRk)
(if (eq CCi (or cond 2))
@@ -5927,7 +5954,7 @@
(define-pmacro (float-abs name src targ op ope attr comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR F-1) attr)
+ ((UNIT FMALL) (FR500-MAJOR F-1) attr)
(.str name "$pack $" src ",$" targ )
(+ pack targ op (rs-null) ope src)
(set targ (abs src))
@@ -5940,7 +5967,7 @@
(dni fdabss
"Floating point dual absolute value, single"
- ((MACH frv) (UNIT FM01) (FR500-MAJOR F-1))
+ ((MACH frv) (UNIT FMALL) (FR500-MAJOR F-1))
"fdabss$pack $FRj,$FRk"
(+ pack FRk OP_79 (rs-null) OPE1_14 FRj)
(sequence ()
@@ -5951,7 +5978,7 @@
(dni cfabss
"Conditional floating point absolute value, single"
- ((UNIT FM01) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,frv))
+ ((UNIT FMALL) (FR500-MAJOR F-1) (MACH simple,tomcat,fr500,frv))
"cfabss$pack $FRj,$FRk,$CCi,$cond"
(+ pack FRj OP_6C (rs-null) CCi cond OPE4_2 FRk)
(if (eq CCi (or cond 2))
@@ -6022,10 +6049,10 @@
((fr500 (unit u-float-sqrt)))
)
-(define-pmacro (float-binary-op-s name operation op ope major comment)
+(define-pmacro (float-binary-op-s name pipe operation op ope major comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR major) (MACH simple,tomcat,fr500,frv))
+ ((UNIT pipe) (FR500-MAJOR major) (MACH simple,tomcat,fr500,frv))
(.str name "$pack $FRi,$FRj,$FRk")
(+ pack FRk op FRi ope FRj)
(set FRk (operation FRi FRj))
@@ -6033,9 +6060,9 @@
)
)
-(float-binary-op-s fadds add OP_79 OPE1_06 F-2 "add single float")
-(float-binary-op-s fsubs sub OP_79 OPE1_07 F-2 "sub single float")
-(float-binary-op-s fmuls mul OP_79 OPE1_08 F-3 "mul single float")
+(float-binary-op-s fadds FMALL add OP_79 OPE1_06 F-2 "add single float")
+(float-binary-op-s fsubs FMALL sub OP_79 OPE1_07 F-2 "sub single float")
+(float-binary-op-s fmuls FM01 mul OP_79 OPE1_08 F-3 "mul single float")
(dni fdivs
"div single float"
@@ -6049,7 +6076,7 @@
(define-pmacro (float-binary-op-d name operation op ope major comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR major) (MACH frv))
+ ((UNIT FMALL) (FR500-MAJOR major) (MACH frv))
(.str name "$pack $FRdoublei,$FRdoublej,$FRdoublek")
(+ pack FRdoublek op FRdoublei ope FRdoublej)
(set FRdoublek (operation FRdoublei FRdoublej))
@@ -6062,10 +6089,10 @@
(float-binary-op-d fmuld mul OP_7A OPE1_08 F-3 "mul double float")
(float-binary-op-d fdivd div OP_7A OPE1_09 F-4 "div double float")
-(define-pmacro (conditional-float-binary-op name operation op ope major comment)
+(define-pmacro (conditional-float-binary-op name pipe operation op ope major comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR major) (MACH simple,tomcat,fr500,frv))
+ ((UNIT pipe) (FR500-MAJOR major) (MACH simple,tomcat,fr500,frv))
(.str name "$pack $FRi,$FRj,$FRk,$CCi,$cond")
(+ pack FRk op FRi CCi cond ope FRj)
(if (eq CCi (or cond 2))
@@ -6074,15 +6101,15 @@
)
)
-(conditional-float-binary-op cfadds add OP_6D OPE4_0 F-2 "cond add single")
-(conditional-float-binary-op cfsubs sub OP_6D OPE4_1 F-2 "cond sub single")
-(conditional-float-binary-op cfmuls mul OP_6E OPE4_0 F-3 "cond mul single")
-(conditional-float-binary-op cfdivs div OP_6E OPE4_1 F-4 "cond div single")
+(conditional-float-binary-op cfadds FMALL add OP_6D OPE4_0 F-2 "cond add single")
+(conditional-float-binary-op cfsubs FMALL sub OP_6D OPE4_1 F-2 "cond sub single")
+(conditional-float-binary-op cfmuls FM01 mul OP_6E OPE4_0 F-3 "cond mul single")
+(conditional-float-binary-op cfdivs FM01 div OP_6E OPE4_1 F-4 "cond div single")
-(define-pmacro (ne-float-binary-op name operation op ope major comment)
+(define-pmacro (ne-float-binary-op name pipe operation op ope major comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR major) (MACH simple,tomcat,fr500,frv))
+ ((UNIT pipe) (FR500-MAJOR major) (MACH simple,tomcat,fr500,frv))
(.str name "$pack $FRi,$FRj,$FRk")
(+ pack FRk op FRi ope FRj)
(sequence ()
@@ -6092,10 +6119,10 @@
)
)
-(ne-float-binary-op nfadds add OP_79 OPE1_26 F-2 "ne add single")
-(ne-float-binary-op nfsubs sub OP_79 OPE1_27 F-2 "ne sub single")
-(ne-float-binary-op nfmuls mul OP_79 OPE1_28 F-3 "ne mul single")
-(ne-float-binary-op nfdivs div OP_79 OPE1_29 F-4 "ne div single")
+(ne-float-binary-op nfadds FMALL add OP_79 OPE1_26 F-2 "ne add single")
+(ne-float-binary-op nfsubs FMALL sub OP_79 OPE1_27 F-2 "ne sub single")
+(ne-float-binary-op nfmuls FM01 mul OP_79 OPE1_28 F-3 "ne mul single")
+(ne-float-binary-op nfdivs FM01 div OP_79 OPE1_29 F-4 "ne div single")
(define-pmacro (fcc-eq) 8)
(define-pmacro (fcc-lt) 4)
@@ -6114,7 +6141,7 @@
(dni fcmps
"compare single float"
- ((UNIT FM01) (FR500-MAJOR F-2) (MACH simple,tomcat,fr500,frv))
+ ((UNIT FMALL) (FR500-MAJOR F-2) (MACH simple,tomcat,fr500,frv))
"fcmps$pack $FRi,$FRj,$FCCi_2"
(+ pack (cond-null) FCCi_2 OP_79 FRi OPE1_0A FRj)
(compare-and-set-fcc FRi FRj FCCi_2)
@@ -6123,7 +6150,7 @@
(dni fcmpd
"compare double float"
- ((UNIT FM01) (FR500-MAJOR F-2) (MACH frv))
+ ((UNIT FMALL) (FR500-MAJOR F-2) (MACH frv))
"fcmpd$pack $FRdoublei,$FRdoublej,$FCCi_2"
(+ pack (cond-null) FCCi_2 OP_7A FRdoublei OPE1_0A FRdoublej)
(compare-and-set-fcc FRdoublei FRdoublej FCCi_2)
@@ -6132,7 +6159,7 @@
(dni cfcmps
"Conditional compare single, float"
- ((UNIT FM01) (FR500-MAJOR F-2) (MACH simple,tomcat,fr500,frv))
+ ((UNIT FMALL) (FR500-MAJOR F-2) (MACH simple,tomcat,fr500,frv))
"cfcmps$pack $FRi,$FRj,$FCCi_2,$CCi,$cond"
(+ pack (cond-null) FCCi_2 OP_6D FRi CCi cond OPE4_2 FRj)
(if (eq CCi (or cond 2))
@@ -6142,7 +6169,7 @@
(dni fdcmps
"float dual compare single"
- ((UNIT FM01) (FR500-MAJOR F-6) (MACH simple,tomcat,fr500,frv))
+ ((UNIT FMALL) (FR500-MAJOR F-6) (MACH simple,tomcat,fr500,frv))
"fdcmps$pack $FRi,$FRj,$FCCi_2"
(+ pack (cond-null) FCCi_2 OP_79 FRi OPE1_1A FRj)
(sequence ()
@@ -6155,7 +6182,7 @@
(define-pmacro (float-mul-with-add name add_sub arg1 arg2 targ op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR F-5) (MACH frv))
+ ((UNIT FMALL) (FR500-MAJOR F-5) (MACH frv))
(.str name "$pack $" arg1 ",$" arg2 ",$" targ)
(+ pack targ op arg1 ope arg2)
(set targ (add_sub (mul arg1 arg2) targ))
@@ -6171,7 +6198,7 @@
(dni fdmadds
"Float dual multiply with add"
- ((UNIT FM01) (FR500-MAJOR F-5) (MACH frv))
+ ((UNIT FMALL) (FR500-MAJOR F-5) (MACH frv))
"fdmadds$pack $FRi,$FRj,$FRk"
(+ pack FRk OP_79 FRi OPE1_1B FRj)
(sequence ()
@@ -6185,7 +6212,7 @@
(dni nfdmadds
"Non excepting float dual multiply with add"
- ((UNIT FM01) (FR500-MAJOR F-5) (MACH frv))
+ ((UNIT FMALL) (FR500-MAJOR F-5) (MACH frv))
"nfdmadds$pack $FRi,$FRj,$FRk"
(+ pack FRk OP_79 FRi OPE1_3B FRj)
(sequence ()
@@ -6203,7 +6230,7 @@
name add_sub arg1 arg2 targ op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR F-5) (MACH frv) CONDITIONAL)
+ ((UNIT FMALL) (FR500-MAJOR F-5) (MACH frv) CONDITIONAL)
(.str name "$pack $FRi,$FRj,$FRk,$CCi,$cond")
(+ pack FRk op FRi CCi cond ope FRj)
(if (eq CCi (or cond 2))
@@ -6218,7 +6245,7 @@
(define-pmacro (ne-float-mul-with-add name add_sub arg1 arg2 targ op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR F-5) (MACH frv) NON-EXCEPTING)
+ ((UNIT FMALL) (FR500-MAJOR F-5) (MACH frv) NON-EXCEPTING)
(.str name "$pack $" arg1 ",$" arg2 ",$" targ)
(+ pack targ op arg1 ope arg2)
(sequence ()
@@ -6455,7 +6482,7 @@
(dni mhsetlos
"Media set lower signed 12 bits"
- ((UNIT FM01) (MACH fr400) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
"mhsetlos$pack $u12,$FRklo"
(+ pack FRklo OP_78 OPE1_20 u12)
(set FRklo u12)
@@ -6464,7 +6491,7 @@
(dni mhsethis
"Media set upper signed 12 bits"
- ((UNIT FM01) (MACH fr400) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
"mhsethis$pack $u12,$FRkhi"
(+ pack FRkhi OP_78 OPE1_22 u12)
(set FRkhi u12)
@@ -6473,7 +6500,7 @@
(dni mhdsets
"Media dual set halfword signed 12 bits"
- ((UNIT FM01) (MACH fr400) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
"mhdsets$pack $u12,$FRintk"
(+ pack FRintk OP_78 OPE1_24 u12)
(sequence ()
@@ -6495,7 +6522,7 @@
(define-pmacro (media-set-5 name hilo op ope comment)
(dni name
(comment)
- ((UNIT FM01) (MACH fr400) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
(.str name "$pack $s5,$FRk" hilo)
(+ pack (.sym FRk hilo) op (FRi-null) ope (misc-null-11) s5)
(set-5-semantics (.sym FRk hilo) s5)
@@ -6508,7 +6535,7 @@
(dni mhdseth
"Media dual set halfword upper 5 bits"
- ((UNIT FM01) (MACH fr400) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
"mhdseth$pack $s5,$FRintk"
(+ pack FRintk OP_78 (FRi-null) OPE1_25 (misc-null-11) s5)
(sequence ()
@@ -6522,7 +6549,7 @@
(define-pmacro (media-logic-r-r name operation op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
(.str name "$pack $FRinti,$FRintj,$FRintk")
(+ pack FRintk op FRinti ope FRintj)
(set FRintk (operation FRinti FRintj))
@@ -6538,7 +6565,7 @@
(define-pmacro (conditional-media-logic name operation op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1) CONDITIONAL)
+ ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-1) CONDITIONAL)
(.str name "$pack $FRinti,$FRintj,$FRintk,$CCi,$cond")
(+ pack FRintk op FRinti CCi cond ope FRintj)
(if (eq CCi (or cond 2))
@@ -6554,7 +6581,7 @@
(dni mnot
("mnot")
- ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
("mnot$pack $FRintj,$FRintk")
(+ pack FRintk OP_7B (rs-null) OPE1_03 FRintj)
(set FRintk (inv FRintj))
@@ -6564,7 +6591,7 @@
(dni cmnot
("cmnot")
- ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1) CONDITIONAL)
+ ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-1) CONDITIONAL)
("cmnot$pack $FRintj,$FRintk,$CCi,$cond")
(+ pack FRintk OP_70 (rs-null) CCi cond OPE4_3 FRintj)
(if (eq CCi (or cond 2))
@@ -6641,7 +6668,7 @@
(dni mdcutssi
"Media dual cut with signed saturation"
- ((UNIT FM0) (MACH fr400) (FR400-MAJOR M-2))
+ ((UNIT FMLOW) (MACH fr400) (FR400-MAJOR M-2))
"mdcutssi$pack $ACC40Si,$s6,$FRintkeven"
(+ pack FRintkeven OP_78 ACC40Si OPE1_0E s6)
(if (register-unaligned ACC40Si 2)
@@ -6669,7 +6696,7 @@
(dni maveh
"Media dual average"
- ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
"maveh$pack $FRinti,$FRintj,$FRintk"
(+ pack FRintk OP_7B FRinti OPE1_08 FRintj)
(set FRintk (c-call SI "@cpu@_media_average" FRinti FRintj))
@@ -6708,7 +6735,7 @@
(define-pmacro (media-dual-word-rotate-r-r name operation op ope comment)
(dni name
(comment)
- ((UNIT FM0) (MACH fr400) (FR400-MAJOR M-2))
+ ((UNIT FMLOW) (MACH fr400) (FR400-MAJOR M-2))
(.str name "$pack $FRintieven,$s6,$FRintkeven")
(+ pack FRintkeven op FRintieven ope s6)
(if (orif (register-unaligned FRintieven 2)
@@ -6729,7 +6756,7 @@
(dni mcplhi
"Media dual couple, halfword"
- ((UNIT FM0) (MACH fr400) (FR400-MAJOR M-2))
+ ((UNIT FMLOW) (MACH fr400) (FR400-MAJOR M-2))
"mcplhi$pack $FRinti,$u6,$FRintk"
(+ pack FRintk OP_78 FRinti OPE1_0C u6)
(sequence ((HI arg1) (HI arg2) (HI shift))
@@ -6749,7 +6776,7 @@
(dni mcpli
"Media dual couple, word"
- ((UNIT FM0) (MACH fr400) (FR400-MAJOR M-2))
+ ((UNIT FMLOW) (MACH fr400) (FR400-MAJOR M-2))
"mcpli$pack $FRinti,$u6,$FRintk"
(+ pack FRintk OP_78 FRinti OPE1_0D u6)
(sequence ((SI tmp) (SI shift))
@@ -6775,7 +6802,7 @@
(dni msaths
"Media dual saturation signed"
- ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
"msaths$pack $FRinti,$FRintj,$FRintk"
(+ pack FRintk OP_7B FRinti OPE1_0C FRintj)
(sequence ((HI argihi) (HI argilo) (HI argjhi) (HI argjlo))
@@ -6788,7 +6815,7 @@
(dni mqsaths
"Media quad saturation signed"
- ((UNIT FM01) (MACH fr400) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
"mqsaths$pack $FRintieven,$FRintjeven,$FRintkeven"
(+ pack FRintkeven OP_78 FRintieven OPE1_0F FRintjeven)
(if (orif (register-unaligned FRintieven 2)
@@ -6818,7 +6845,7 @@
(dni msathu
"Media dual saturation unsigned"
- ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
"msathu$pack $FRinti,$FRintj,$FRintk"
(+ pack FRintk OP_7B FRinti OPE1_0D FRintj)
(sequence ((UHI argihi) (UHI argilo) (UHI argjhi) (UHI argjlo))
@@ -6832,7 +6859,7 @@
(define-pmacro (media-dual-compare name mode op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
(.str name "$pack $FRinti,$FRintj,$FCCk")
(+ pack (cond-null) FCCk op FRinti ope FRintj)
(if (register-unaligned FCCk 2)
@@ -6876,7 +6903,7 @@
(dni mabshs
"Media dual absolute value, halfword"
- ((UNIT FM01) (MACH fr400) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
"mabshs$pack $FRintj,$FRintk"
(+ pack FRintk OP_78 (FRi-null) OPE1_0A FRintj)
(sequence ((HI arghi) (HI arglo))
@@ -6912,7 +6939,7 @@
(define-pmacro (media-dual-arith-sat name operation mode max min op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
(.str name "$pack $FRinti,$FRintj,$FRintk")
(+ pack FRintk op FRinti ope FRintj)
(media-dual-arith-sat-semantics operation mode max min)
@@ -6931,7 +6958,7 @@
name operation mode max min op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-1) CONDITIONAL)
+ ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-1) CONDITIONAL)
(.str name "$pack $FRinti,$FRintj,$FRintk,$CCi,$cond")
(+ pack FRintk op FRinti CCi cond ope FRintj)
(if (eq CCi (or cond 2))
@@ -6977,7 +7004,7 @@
(define-pmacro (media-quad-arith-sat name operation mode max min op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-2))
+ ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-2))
(.str name "$pack $FRintieven,$FRintjeven,$FRintkeven")
(+ pack FRintkeven op FRintieven ope FRintjeven)
(media-quad-arith-sat-semantics 1 operation mode max min)
@@ -7002,7 +7029,7 @@
name operation mode max min op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-1) (FR400-MAJOR M-2) CONDITIONAL)
+ ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-2) CONDITIONAL)
(.str name "$pack $FRintieven,$FRintjeven,$FRintkeven,$CCi,$cond")
(+ pack FRintkeven op FRintieven CCi cond ope FRintjeven)
(media-quad-arith-sat-semantics (eq CCi (or cond 2))
@@ -7027,7 +7054,7 @@
(define-pmacro (media-acc-arith-sat name operation mode max min op ope comment)
(dni name
(comment)
- ((UNIT FM01) (MACH fr400) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
(.str name "$pack $ACC40Si,$ACC40Sk")
(+ pack ACC40Sk op ACC40Si ope (ACCj-null))
(if (register-unaligned ACC40Si 2)
@@ -7048,7 +7075,7 @@
comment)
(dni name
(comment)
- ((UNIT FM0) (MACH fr400) (FR400-MAJOR M-2))
+ ((UNIT MDUALACC) (MACH fr400) (FR400-MAJOR M-2))
(.str name "$pack $ACC40Si,$ACC40Sk")
(+ pack ACC40Sk op ACC40Si ope (ACCj-null))
(if (register-unaligned ACC40Si 4)
@@ -7077,7 +7104,7 @@
(dni masaccs
"Media add and subtract signed accumulator with saturation"
- ((UNIT FM01) (MACH fr400) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (MACH fr400) (FR400-MAJOR M-1))
"masaccs$pack $ACC40Si,$ACC40Sk"
(+ pack ACC40Sk OP_78 ACC40Si OPE1_08 (ACCj-null))
(if (register-unaligned ACC40Si 2)
@@ -7103,7 +7130,7 @@
(dni mdasaccs
"Media add and subtract signed accumulator with saturation"
- ((UNIT FM0) (MACH fr400) (FR400-MAJOR M-2))
+ ((UNIT MDUALACC) (MACH fr400) (FR400-MAJOR M-2))
"mdasaccs$pack $ACC40Si,$ACC40Sk"
(+ pack ACC40Sk OP_78 ACC40Si OPE1_09 (ACCj-null))
(if (register-unaligned ACC40Si 4)
@@ -7162,7 +7189,7 @@
(define-pmacro (media-dual-multiply name mode conv rhs1 rhs2 op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-1) PRESERVE-OVF)
+ ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-1) PRESERVE-OVF)
(.str name "$pack $FRinti,$FRintj,$ACC40Sk")
(+ pack ACC40Sk op FRinti ope FRintj)
(media-dual-multiply-semantics 1 mode conv rhs1 rhs2)
@@ -7181,7 +7208,7 @@
name mode conv rhs1 rhs2 op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-1)
+ ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-1)
PRESERVE-OVF CONDITIONAL)
(.str name "$pack $FRinti,$FRintj,$ACC40Sk,$CCi,$cond")
(+ pack ACC40Sk op FRinti CCi cond ope FRintj)
@@ -7219,7 +7246,7 @@
(define-pmacro (media-quad-multiply name mode conv rhs1 rhs2 op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-2) PRESERVE-OVF)
+ ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-2) PRESERVE-OVF)
(.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk")
(+ pack ACC40Sk op FRintieven ope FRintjeven)
(media-quad-multiply-semantics 1 mode conv rhs1 rhs2)
@@ -7242,7 +7269,7 @@
name mode conv rhs1 rhs2 op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-2)
+ ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-2)
PRESERVE-OVF CONDITIONAL)
(.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk,$CCi,$cond")
(+ pack ACC40Sk op FRintieven CCi cond ope FRintjeven)
@@ -7286,7 +7313,7 @@
name mode conv addop rhw res max min op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-1))
(.str name "$pack $FRinti,$FRintj,$" res)
(+ pack res op FRinti ope FRintj)
(media-dual-multiply-acc-semantics 1 mode conv addop rhw res max min)
@@ -7319,7 +7346,7 @@
name mode conv addop rhw res max min op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-1) CONDITIONAL)
+ ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-1) CONDITIONAL)
(.str name "$pack $FRinti,$FRintj,$" res ",$CCi,$cond")
(+ pack res op FRinti CCi cond ope FRintj)
(media-dual-multiply-acc-semantics (eq CCi (or cond 2))
@@ -7372,7 +7399,7 @@
name mode conv addop rhw res max min op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-2))
+ ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-2))
(.str name "$pack $FRintieven,$FRintjeven,$" res)
(+ pack res op FRintieven ope FRintjeven)
(media-quad-multiply-acc-semantics 1 mode conv addop rhw res max min)
@@ -7399,7 +7426,7 @@
name mode conv addop rhw res max min op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-2) CONDITIONAL)
+ ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-2) CONDITIONAL)
(.str name "$pack $FRintieven,$FRintjeven,$" res ",$CCi,$cond")
(+ pack res op FRintieven CCi cond ope FRintjeven)
(media-quad-multiply-acc-semantics (eq CCi (or cond 2))
@@ -7456,7 +7483,7 @@
name mode conv addop rhw res max min op ope comment)
(dni name
(comment)
- ((UNIT FM0) (MACH fr400) (FR400-MAJOR M-2))
+ ((UNIT MDUALACC) (MACH fr400) (FR400-MAJOR M-2))
(.str name "$pack $FRintieven,$FRintjeven,$" res)
(+ pack res op FRintieven ope FRintjeven)
(media-quad-multiply-cross-acc-semantics 1 mode conv addop rhw res
@@ -7505,7 +7532,7 @@
name mode conv addop rhw res max min op ope comment)
(dni name
(comment)
- ((UNIT FM0) (MACH fr400) (FR400-MAJOR M-2))
+ ((UNIT MDUALACC) (MACH fr400) (FR400-MAJOR M-2))
(.str name "$pack $FRintieven,$FRintjeven,$" res)
(+ pack res op FRintieven ope FRintjeven)
(media-quad-cross-multiply-cross-acc-semantics 1 mode conv addop rhw res
@@ -7554,7 +7581,7 @@
name mode conv addop rhw res max min op ope comment)
(dni name
(comment)
- ((UNIT FM0) (MACH fr400) (FR400-MAJOR M-2))
+ ((UNIT MDUALACC) (MACH fr400) (FR400-MAJOR M-2))
(.str name "$pack $FRintieven,$FRintjeven,$" res)
(+ pack res op FRintieven ope FRintjeven)
(media-quad-cross-multiply-acc-semantics 1 mode conv addop rhw res
@@ -7619,7 +7646,7 @@
name mode conv rhs1 rhs2 max min op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-1))
+ ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-1))
(.str name "$pack $FRinti,$FRintj,$ACC40Sk")
(+ pack ACC40Sk op FRinti ope FRintj)
(media-dual-complex-semantics-i mode conv rhs1 rhs2 max min)
@@ -7666,7 +7693,7 @@
name mode conv rhs1 rhs2 max min op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-1) CONDITIONAL)
+ ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-1) CONDITIONAL)
(.str name "$pack $FRinti,$FRintj,$ACC40Sk,$CCi,$cond")
(+ pack ACC40Sk op FRinti CCi cond ope FRintj)
(if (eq CCi (or cond 2))
@@ -7733,7 +7760,7 @@
name mode conv rhs1 rhs2 max min op ope comment)
(dni name
(comment)
- ((UNIT FM01) (FR500-MAJOR M-4) (FR400-MAJOR M-2))
+ ((UNIT FMALL) (FR500-MAJOR M-4) (FR400-MAJOR M-2))
(.str name "$pack $FRintieven,$FRintjeven,$ACC40Sk")
(+ pack ACC40Sk op FRintieven ope FRintjeven)
(if (register-unaligned ACC40Sk 2)
@@ -8067,12 +8094,34 @@
((fr500 (unit u-media-dual-btohe)))
)
-(dni mclracc
+; Media NOP
+; A special case of mclracc
+(dni mnop "Media nop"
+ ((UNIT FMALL) (FR500-MAJOR M-1) (FR400-MAJOR M-1))
+ "mnop$pack"
+ (+ pack (f-ACC40Sk 63) OP_7B (f-A 1) (misc-null-10) OPE1_3B (FRj-null))
+ (nop)
+ ()
+)
+
+; mclracc with #A==0
+(dni mclracc-0
+ "Media clear accumulator(s)"
+ ((UNIT FM01) (FR500-MAJOR M-3) (FR400-MAJOR M-1))
+ "mclracc$pack $ACC40Sk,$A0"
+ (+ pack ACC40Sk OP_7B (f-A 0) (misc-null-10) OPE1_3B (FRj-null))
+ (c-call VOID "@cpu@_clear_accumulators" (index-of ACC40Sk) 0)
+ ((fr400 (unit u-media-4))
+ (fr500 (unit u-media)))
+)
+
+; mclracc with #A==1
+(dni mclracc-1
"Media clear accumulator(s)"
- ((UNIT FM01) (FR500-MAJOR M-3))
- "mclracc$pack $ACC40Sk,$A"
- (+ pack ACC40Sk OP_7B A (misc-null-10) OPE1_3B (FRj-null))
- (c-call VOID "@cpu@_clear_accumulators" (index-of ACC40Sk) A)
+ ((UNIT MCLRACC-1) (FR500-MAJOR M-6) (FR400-MAJOR M-2))
+ "mclracc$pack $ACC40Sk,$A1"
+ (+ pack ACC40Sk OP_7B (f-A 1) (misc-null-10) OPE1_3B (FRj-null))
+ (c-call VOID "@cpu@_clear_accumulators" (index-of ACC40Sk) 1)
((fr400 (unit u-media-4))
(fr500 (unit u-media)))
)
@@ -8138,7 +8187,7 @@
; On the other hand spending a little time in the decoder is often worth it.
;
(dnmi nop "nop"
- ((UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ ((UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
"nop$pack"
(emit ori pack (GRi 0) (s12 0) (GRk 0))
)
@@ -8146,21 +8195,13 @@
; Floating point NOP
(dni fnop
"Floating point nop"
- ((UNIT FM01) (FR500-MAJOR F-8) (MACH simple,tomcat,fr500,frv))
+ ((UNIT FMALL) (FR500-MAJOR F-8) (MACH simple,tomcat,fr500,frv))
"fnop$pack"
(+ pack (rd-null) OP_79 (FRi-null) OPE1_0D (FRj-null))
(nop)
()
)
-; Media NOP
-; A special case of mclracc
-(dnmi mnop "Media nop"
- (NO-DIS (UNIT FM01) (FR500-MAJOR M-3))
- "mnop$pack"
- (emit mclracc pack (ACC40Sk 63) (A 1))
-)
-
; A return instruction
(dnmi ret "return"
(NO-DIS (UNIT B01) (FR500-MAJOR B-3) (FR400-MAJOR B-3))
@@ -8169,31 +8210,31 @@
)
(dnmi cmp "compare"
- (NO-DIS (UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ (NO-DIS (UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
"cmp$pack $GRi,$GRj,$ICCi_1"
(emit subcc pack GRi GRj (GRk 0) ICCi_1)
)
(dnmi cmpi "compare immediate"
- (NO-DIS (UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ (NO-DIS (UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
"cmpi$pack $GRi,$s10,$ICCi_1"
(emit subicc pack GRi s10 (GRk 0) ICCi_1)
)
(dnmi ccmp "conditional compare"
- (NO-DIS (UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+ (NO-DIS (UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
"ccmp$pack $GRi,$GRj,$CCi,$cond"
(emit csubcc pack GRi GRj (GRk 0) CCi cond)
)
(dnmi mov "move"
- (NO-DIS (UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
+ (NO-DIS (UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1))
"mov$pack $GRi,$GRk"
(emit ori pack GRi (s12 0) GRk)
)
(dnmi cmov "conditional move"
- (NO-DIS (UNIT I01) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
+ (NO-DIS (UNIT IALL) (FR500-MAJOR I-1) (FR400-MAJOR I-1) CONDITIONAL)
"cmov$pack $GRi,$GRk,$CCi,$cond"
(emit cor pack GRi (GRj 0) GRk CCi cond)
)
diff --git a/cpu/frv.opc b/cpu/frv.opc
index fb9434e..cd3572f 100644
--- a/cpu/frv.opc
+++ b/cpu/frv.opc
@@ -185,7 +185,7 @@ frv_is_media_insn (const CGEN_INSN *insn)
/* This table represents the allowable packing for vliw insns for the fr400.
The fr400 has only 2 vliw slots. Represent this by not allowing any insns
- in slots 2 and 3.
+ in the extra slots.
Subsets of any given row are also allowed. */
static VLIW_COMBO fr400_allowed_vliw[] =
{
@@ -228,15 +228,23 @@ static CGEN_ATTR_VALUE_TYPE fr400_unit_mapping[] =
/* I0 */ UNIT_I0,
/* I1 */ UNIT_I1,
/* I01 */ UNIT_I01,
+/* IALL */ UNIT_I01, /* only I0 and I1 units */
/* FM0 */ UNIT_FM0,
/* FM1 */ UNIT_FM1,
/* FM01 */ UNIT_FM01,
+/* FMALL */ UNIT_FM01,/* Only F0,F1,M0,M1 units */
+/* FMLOW */ UNIT_FM0, /* Only F0,M0 units */
/* B0 */ UNIT_B0, /* branches only in B0 unit. */
/* B1 */ UNIT_B0,
/* B01 */ UNIT_B0,
/* C */ UNIT_C,
-/* MULT-DIV */ UNIT_I0, /* multiply and divide only in I0 unit. */
-/* LOAD */ UNIT_I0 /* load only in I0 unit. */
+/* MULT-DIV */ UNIT_I0, /* multiply and divide only in I0 unit. */
+/* LOAD */ UNIT_I0, /* load only in I0 unit. */
+/* STORE */ UNIT_I0, /* store only in I0 unit. */
+/* SCAN */ UNIT_I0, /* scan only in I0 unit. */
+/* DCPL */ UNIT_C, /* dcpl only in C unit. */
+/* MDUALACC */ UNIT_FM0, /* media dual acc insn only in FM0 unit. */
+/* MCLRACC-1*/ UNIT_FM0 /* mclracc,A==1 insn only in FM0 unit. */
};
static CGEN_ATTR_VALUE_TYPE fr500_unit_mapping[] =
@@ -246,15 +254,23 @@ static CGEN_ATTR_VALUE_TYPE fr500_unit_mapping[] =
/* I0 */ UNIT_I0,
/* I1 */ UNIT_I1,
/* I01 */ UNIT_I01,
+/* IALL */ UNIT_I01, /* only I0 and I1 units */
/* FM0 */ UNIT_FM0,
/* FM1 */ UNIT_FM1,
/* FM01 */ UNIT_FM01,
+/* FMALL */ UNIT_FM01,/* Only F0,F1,M0,M1 units */
+/* FMLOW */ UNIT_FM0, /* Only F0,M0 units */
/* B0 */ UNIT_B0,
/* B1 */ UNIT_B1,
/* B01 */ UNIT_B01,
/* C */ UNIT_C,
/* MULT-DIV */ UNIT_I01, /* multiply and divide in I0 or I1 unit. */
-/* LOAD */ UNIT_I01 /* load in I0 or I1 unit. */
+/* LOAD */ UNIT_I01, /* load in I0 or I1 unit. */
+/* STORE */ UNIT_I0, /* store only in I0 unit. */
+/* SCAN */ UNIT_I01, /* scan in I0 or I1 unit. */
+/* DCPL */ UNIT_C, /* dcpl only in C unit. */
+/* MDUALACC */ UNIT_FM0, /* media dual acc insn only in FM0 unit. */
+/* MCLRACC-1*/ UNIT_FM01 /* mclracc,A==1 in FM0 or FM1 unit. */
};
void
@@ -537,10 +553,15 @@ frv_vliw_add_insn (FRV_VLIW *vliw, const CGEN_INSN *insn)
if (unit == UNIT_NIL)
abort (); /* no UNIT specified for this insn in frv.cpu */
- if (vliw->mach == bfd_mach_fr400)
- major = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR400_MAJOR);
- else
- major = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR500_MAJOR);
+ switch (vliw->mach)
+ {
+ case bfd_mach_fr400:
+ major = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR400_MAJOR);
+ break;
+ default:
+ major = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_FR500_MAJOR);
+ break;
+ }
if (index <= 0)
{
@@ -606,6 +627,12 @@ static const char * parse_u12
PARAMS ((CGEN_CPU_DESC, const char **, int, long *));
static const char * parse_even_register
PARAMS ((CGEN_CPU_DESC, const char **, CGEN_KEYWORD *, long *));
+static const char * parse_A0
+ PARAMS ((CGEN_CPU_DESC, const char **, int, long *));
+static const char * parse_A1
+ PARAMS ((CGEN_CPU_DESC, const char **, int, long *));
+static const char * parse_A
+ PARAMS ((CGEN_CPU_DESC, const char **, int, long *, long));
static const char *
parse_ulo16 (cd, strp, opindex, valuep)
@@ -889,6 +916,49 @@ parse_u12 (cd, strp, opindex, valuep)
}
static const char *
+parse_A (cd, strp, opindex, valuep, A)
+ CGEN_CPU_DESC cd;
+ const char **strp;
+ int opindex;
+ long *valuep;
+ long A;
+{
+ const char *errmsg;
+
+ if (**strp == '#')
+ ++*strp;
+
+ errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, valuep);
+ if (errmsg)
+ return errmsg;
+
+ if (*valuep != A)
+ return "Value of A operand must be 0 or 1";
+
+ return NULL;
+}
+
+static const char *
+parse_A0 (cd, strp, opindex, valuep)
+ CGEN_CPU_DESC cd;
+ const char **strp;
+ int opindex;
+ long *valuep;
+{
+ return parse_A (cd, strp, opindex, valuep, 0);
+}
+
+static const char *
+parse_A1 (cd, strp, opindex, valuep)
+ CGEN_CPU_DESC cd;
+ const char **strp;
+ int opindex;
+ long *valuep;
+{
+ return parse_A (cd, strp, opindex, valuep, 1);
+}
+
+static const char *
parse_even_register (cd, strP, tableP, valueP)
CGEN_CPU_DESC cd;
const char ** strP;