Renamed OpClass enum members: they all end in 'Op' now.
Got rid of two inconsistent sets of strings that corresponded to this enum, and replaced with a single set that clearly matches the enum names. arch/alpha/isa_desc: arch/isa_parser.py: cpu/full_cpu/op_class.hh: Renamed OpClass enum members. --HG-- extra : convert_revision : bf596f7568a20b2e77c07ac349f253135141aef4
This commit is contained in:
parent
a95edd1e45
commit
53dde8579b
3 changed files with 46 additions and 46 deletions
|
@ -811,7 +811,7 @@ output header {{
|
||||||
public:
|
public:
|
||||||
/// Constructor
|
/// Constructor
|
||||||
EACompBase(MachInst machInst)
|
EACompBase(MachInst machInst)
|
||||||
: AlphaStaticInst("(eacomp)", machInst, IntALU)
|
: AlphaStaticInst("(eacomp)", machInst, IntAluOp)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1072,7 +1072,7 @@ def format LoadOrPrefetch(ea_code, memacc_code, *pf_flags) {{
|
||||||
# Declare the prefetch instruction object.
|
# Declare the prefetch instruction object.
|
||||||
|
|
||||||
# convert flags from tuple to list to make them mutable
|
# convert flags from tuple to list to make them mutable
|
||||||
pf_flags = list(pf_flags) + ['IsMemRef', 'IsLoad', 'IsDataPrefetch', 'RdPort']
|
pf_flags = list(pf_flags) + ['IsMemRef', 'IsLoad', 'IsDataPrefetch', 'MemReadOp']
|
||||||
|
|
||||||
(pf_header_output, pf_decoder_output, _, pf_exec_output) = \
|
(pf_header_output, pf_decoder_output, _, pf_exec_output) = \
|
||||||
LoadStoreBase(name, Name + 'Prefetch', ea_code, '',
|
LoadStoreBase(name, Name + 'Prefetch', ea_code, '',
|
||||||
|
@ -2083,13 +2083,13 @@ decode OPCODE default Unknown::unknown() {
|
||||||
}
|
}
|
||||||
|
|
||||||
0x13: decode INTFUNC { // integer multiplies
|
0x13: decode INTFUNC { // integer multiplies
|
||||||
0x00: mull({{ Rc.sl = Ra.sl * Rb_or_imm.sl; }}, IntMULT);
|
0x00: mull({{ Rc.sl = Ra.sl * Rb_or_imm.sl; }}, IntMultOp);
|
||||||
0x20: mulq({{ Rc = Ra * Rb_or_imm; }}, IntMULT);
|
0x20: mulq({{ Rc = Ra * Rb_or_imm; }}, IntMultOp);
|
||||||
0x30: umulh({{
|
0x30: umulh({{
|
||||||
uint64_t hi, lo;
|
uint64_t hi, lo;
|
||||||
mul128(Ra, Rb_or_imm, hi, lo);
|
mul128(Ra, Rb_or_imm, hi, lo);
|
||||||
Rc = hi;
|
Rc = hi;
|
||||||
}}, IntMULT);
|
}}, IntMultOp);
|
||||||
0x40: mullv({{
|
0x40: mullv({{
|
||||||
// 32-bit multiply with trap on overflow
|
// 32-bit multiply with trap on overflow
|
||||||
int64_t Rax = Ra.sl; // sign extended version of Ra.sl
|
int64_t Rax = Ra.sl; // sign extended version of Ra.sl
|
||||||
|
@ -2102,7 +2102,7 @@ decode OPCODE default Unknown::unknown() {
|
||||||
if (sign_bits != 0 && sign_bits != mask(33))
|
if (sign_bits != 0 && sign_bits != mask(33))
|
||||||
fault = Integer_Overflow_Fault;
|
fault = Integer_Overflow_Fault;
|
||||||
Rc.sl = tmp<31:0>;
|
Rc.sl = tmp<31:0>;
|
||||||
}}, IntMULT);
|
}}, IntMultOp);
|
||||||
0x60: mulqv({{
|
0x60: mulqv({{
|
||||||
// 64-bit multiply with trap on overflow
|
// 64-bit multiply with trap on overflow
|
||||||
uint64_t hi, lo;
|
uint64_t hi, lo;
|
||||||
|
@ -2113,7 +2113,7 @@ decode OPCODE default Unknown::unknown() {
|
||||||
(hi == mask(64) && lo<63:> == 1)))
|
(hi == mask(64) && lo<63:> == 1)))
|
||||||
fault = Integer_Overflow_Fault;
|
fault = Integer_Overflow_Fault;
|
||||||
Rc = lo;
|
Rc = lo;
|
||||||
}}, IntMULT);
|
}}, IntMultOp);
|
||||||
}
|
}
|
||||||
|
|
||||||
0x1c: decode INTFUNC {
|
0x1c: decode INTFUNC {
|
||||||
|
@ -2141,11 +2141,11 @@ decode OPCODE default Unknown::unknown() {
|
||||||
|
|
||||||
format BasicOperateWithNopCheck {
|
format BasicOperateWithNopCheck {
|
||||||
0x70: decode RB {
|
0x70: decode RB {
|
||||||
31: ftoit({{ Rc = Fa.uq; }}, FloatCVT);
|
31: ftoit({{ Rc = Fa.uq; }}, FloatCvtOp);
|
||||||
}
|
}
|
||||||
0x78: decode RB {
|
0x78: decode RB {
|
||||||
31: ftois({{ Rc.sl = t_to_s(Fa.uq); }},
|
31: ftois({{ Rc.sl = t_to_s(Fa.uq); }},
|
||||||
FloatCVT);
|
FloatCvtOp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2192,8 +2192,8 @@ decode OPCODE default Unknown::unknown() {
|
||||||
0x4: decode RB {
|
0x4: decode RB {
|
||||||
31: decode FP_FULLFUNC {
|
31: decode FP_FULLFUNC {
|
||||||
format BasicOperateWithNopCheck {
|
format BasicOperateWithNopCheck {
|
||||||
0x004: itofs({{ Fc.uq = s_to_t(Ra.ul); }}, FloatCVT);
|
0x004: itofs({{ Fc.uq = s_to_t(Ra.ul); }}, FloatCvtOp);
|
||||||
0x024: itoft({{ Fc.uq = Ra.uq; }}, FloatCVT);
|
0x024: itoft({{ Fc.uq = Ra.uq; }}, FloatCvtOp);
|
||||||
0x014: FailUnimpl::itoff(); // VAX-format conversion
|
0x014: FailUnimpl::itoff(); // VAX-format conversion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2208,19 +2208,19 @@ decode OPCODE default Unknown::unknown() {
|
||||||
if (Fb < 0.0)
|
if (Fb < 0.0)
|
||||||
fault = Arithmetic_Fault;
|
fault = Arithmetic_Fault;
|
||||||
Fc = sqrt(Fb);
|
Fc = sqrt(Fb);
|
||||||
}}, FloatSQRT);
|
}}, FloatSqrtOp);
|
||||||
#else
|
#else
|
||||||
0x0b: sqrts({{
|
0x0b: sqrts({{
|
||||||
if (Fb.sf < 0.0)
|
if (Fb.sf < 0.0)
|
||||||
fault = Arithmetic_Fault;
|
fault = Arithmetic_Fault;
|
||||||
Fc.sf = sqrt(Fb.sf);
|
Fc.sf = sqrt(Fb.sf);
|
||||||
}}, FloatSQRT);
|
}}, FloatSqrtOp);
|
||||||
#endif
|
#endif
|
||||||
0x2b: sqrtt({{
|
0x2b: sqrtt({{
|
||||||
if (Fb < 0.0)
|
if (Fb < 0.0)
|
||||||
fault = Arithmetic_Fault;
|
fault = Arithmetic_Fault;
|
||||||
Fc = sqrt(Fb);
|
Fc = sqrt(Fb);
|
||||||
}}, FloatSQRT);
|
}}, FloatSqrtOp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2246,19 +2246,19 @@ decode OPCODE default Unknown::unknown() {
|
||||||
#ifdef SS_COMPATIBLE_FP
|
#ifdef SS_COMPATIBLE_FP
|
||||||
0x00: adds({{ Fc = Fa + Fb; }});
|
0x00: adds({{ Fc = Fa + Fb; }});
|
||||||
0x01: subs({{ Fc = Fa - Fb; }});
|
0x01: subs({{ Fc = Fa - Fb; }});
|
||||||
0x02: muls({{ Fc = Fa * Fb; }}, FloatMULT);
|
0x02: muls({{ Fc = Fa * Fb; }}, FloatMultOp);
|
||||||
0x03: divs({{ Fc = Fa / Fb; }}, FloatDIV);
|
0x03: divs({{ Fc = Fa / Fb; }}, FloatDivOp);
|
||||||
#else
|
#else
|
||||||
0x00: adds({{ Fc.sf = Fa.sf + Fb.sf; }});
|
0x00: adds({{ Fc.sf = Fa.sf + Fb.sf; }});
|
||||||
0x01: subs({{ Fc.sf = Fa.sf - Fb.sf; }});
|
0x01: subs({{ Fc.sf = Fa.sf - Fb.sf; }});
|
||||||
0x02: muls({{ Fc.sf = Fa.sf * Fb.sf; }}, FloatMULT);
|
0x02: muls({{ Fc.sf = Fa.sf * Fb.sf; }}, FloatMultOp);
|
||||||
0x03: divs({{ Fc.sf = Fa.sf / Fb.sf; }}, FloatDIV);
|
0x03: divs({{ Fc.sf = Fa.sf / Fb.sf; }}, FloatDivOp);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
0x20: addt({{ Fc = Fa + Fb; }});
|
0x20: addt({{ Fc = Fa + Fb; }});
|
||||||
0x21: subt({{ Fc = Fa - Fb; }});
|
0x21: subt({{ Fc = Fa - Fb; }});
|
||||||
0x22: mult({{ Fc = Fa * Fb; }}, FloatMULT);
|
0x22: mult({{ Fc = Fa * Fb; }}, FloatMultOp);
|
||||||
0x23: divt({{ Fc = Fa / Fb; }}, FloatDIV);
|
0x23: divt({{ Fc = Fa / Fb; }}, FloatDivOp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2272,14 +2272,14 @@ decode OPCODE default Unknown::unknown() {
|
||||||
1: decode FP_FULLFUNC {
|
1: decode FP_FULLFUNC {
|
||||||
format BasicOperateWithNopCheck {
|
format BasicOperateWithNopCheck {
|
||||||
0x0a5, 0x5a5: cmpteq({{ Fc = (Fa == Fb) ? 2.0 : 0.0; }},
|
0x0a5, 0x5a5: cmpteq({{ Fc = (Fa == Fb) ? 2.0 : 0.0; }},
|
||||||
FloatCMP);
|
FloatCmpOp);
|
||||||
0x0a7, 0x5a7: cmptle({{ Fc = (Fa <= Fb) ? 2.0 : 0.0; }},
|
0x0a7, 0x5a7: cmptle({{ Fc = (Fa <= Fb) ? 2.0 : 0.0; }},
|
||||||
FloatCMP);
|
FloatCmpOp);
|
||||||
0x0a6, 0x5a6: cmptlt({{ Fc = (Fa < Fb) ? 2.0 : 0.0; }},
|
0x0a6, 0x5a6: cmptlt({{ Fc = (Fa < Fb) ? 2.0 : 0.0; }},
|
||||||
FloatCMP);
|
FloatCmpOp);
|
||||||
0x0a4, 0x5a4: cmptun({{ // unordered
|
0x0a4, 0x5a4: cmptun({{ // unordered
|
||||||
Fc = (!(Fa < Fb) && !(Fa == Fb) && !(Fa > Fb)) ? 2.0 : 0.0;
|
Fc = (!(Fa < Fb) && !(Fa == Fb) && !(Fa > Fb)) ? 2.0 : 0.0;
|
||||||
}}, FloatCMP);
|
}}, FloatCmpOp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2371,7 +2371,7 @@ decode OPCODE default Unknown::unknown() {
|
||||||
format MiscPrefetch {
|
format MiscPrefetch {
|
||||||
0xf800: wh64({{ EA = Rb; }},
|
0xf800: wh64({{ EA = Rb; }},
|
||||||
{{ xc->writeHint(EA, 64); }},
|
{{ xc->writeHint(EA, 64); }},
|
||||||
IsMemRef, IsStore, WrPort);
|
IsMemRef, IsStore, MemWriteOp);
|
||||||
}
|
}
|
||||||
|
|
||||||
format BasicOperate {
|
format BasicOperate {
|
||||||
|
@ -2401,8 +2401,8 @@ decode OPCODE default Unknown::unknown() {
|
||||||
// them the same though.
|
// them the same though.
|
||||||
0x0000: trapb({{ }}, IsSerializing, No_OpClass);
|
0x0000: trapb({{ }}, IsSerializing, No_OpClass);
|
||||||
0x0400: excb({{ }}, IsSerializing, No_OpClass);
|
0x0400: excb({{ }}, IsSerializing, No_OpClass);
|
||||||
0x4000: mb({{ }}, IsMemBarrier, RdPort);
|
0x4000: mb({{ }}, IsMemBarrier, MemReadOp);
|
||||||
0x4400: wmb({{ }}, IsWriteBarrier, WrPort);
|
0x4400: wmb({{ }}, IsWriteBarrier, MemWriteOp);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef FULL_SYSTEM
|
#ifdef FULL_SYSTEM
|
||||||
|
|
|
@ -1493,19 +1493,19 @@ class CodeBlock:
|
||||||
# These are good enough for most cases, and will be overridden
|
# These are good enough for most cases, and will be overridden
|
||||||
# later otherwise.
|
# later otherwise.
|
||||||
if 'IsStore' in self.flags:
|
if 'IsStore' in self.flags:
|
||||||
self.op_class = 'WrPort'
|
self.op_class = 'MemWriteOp'
|
||||||
elif 'IsLoad' in self.flags or 'IsPrefetch' in self.flags:
|
elif 'IsLoad' in self.flags or 'IsPrefetch' in self.flags:
|
||||||
self.op_class = 'RdPort'
|
self.op_class = 'MemReadOp'
|
||||||
elif 'IsFloating' in self.flags:
|
elif 'IsFloating' in self.flags:
|
||||||
self.op_class = 'FloatADD'
|
self.op_class = 'FloatAddOp'
|
||||||
else:
|
else:
|
||||||
self.op_class = 'IntALU'
|
self.op_class = 'IntAluOp'
|
||||||
|
|
||||||
# Assume all instruction flags are of the form 'IsFoo'
|
# Assume all instruction flags are of the form 'IsFoo'
|
||||||
instFlagRE = re.compile(r'Is.*')
|
instFlagRE = re.compile(r'Is.*')
|
||||||
|
|
||||||
# OpClass constants are just a little more complicated
|
# OpClass constants end in 'Op' except No_OpClass
|
||||||
opClassRE = re.compile(r'Int.*|Float.*|.*Port|No_OpClass')
|
opClassRE = re.compile(r'.*Op|No_OpClass')
|
||||||
|
|
||||||
class InstObjParams:
|
class InstObjParams:
|
||||||
def __init__(self, mnem, class_name, base_class = '',
|
def __init__(self, mnem, class_name, base_class = '',
|
||||||
|
|
|
@ -40,23 +40,23 @@
|
||||||
*/
|
*/
|
||||||
enum OpClass {
|
enum OpClass {
|
||||||
No_OpClass = 0, /* inst does not use a functional unit */
|
No_OpClass = 0, /* inst does not use a functional unit */
|
||||||
IntALU, /* integer ALU */
|
IntAluOp, /* integer ALU */
|
||||||
IntMULT, /* integer multiplier */
|
IntMultOp, /* integer multiplier */
|
||||||
IntDIV, /* integer divider */
|
IntDivOp, /* integer divider */
|
||||||
FloatADD, /* floating point adder/subtractor */
|
FloatAddOp, /* floating point adder/subtractor */
|
||||||
FloatCMP, /* floating point comparator */
|
FloatCmpOp, /* floating point comparator */
|
||||||
FloatCVT, /* floating point<->integer converter */
|
FloatCvtOp, /* floating point<->integer converter */
|
||||||
FloatMULT, /* floating point multiplier */
|
FloatMultOp, /* floating point multiplier */
|
||||||
FloatDIV, /* floating point divider */
|
FloatDivOp, /* floating point divider */
|
||||||
FloatSQRT, /* floating point square root */
|
FloatSqrtOp, /* floating point square root */
|
||||||
RdPort, /* memory read port */
|
MemReadOp, /* memory read port */
|
||||||
WrPort, /* memory write port */
|
MemWriteOp, /* memory write port */
|
||||||
IPrefPort,
|
InstPrefetchOp, /* instruction prefetch port (on I-cache) */
|
||||||
Num_OpClasses /* total functional unit classes */
|
Num_OpClasses /* total functional unit classes */
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Array mapping OpClass enum values to strings.
|
* Array mapping OpClass enum values to strings. Defined in fu_pool.cc.
|
||||||
*/
|
*/
|
||||||
extern const char *opClassStrings[];
|
extern const char *opClassStrings[];
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue