specop.isa (4539:6eeeea62b7c4) specop.isa (4590:5c3813b700a3)
1// Copyright (c) 2007 The Hewlett-Packard Development Company
2// All rights reserved.
3//
4// Redistribution and use of this software in source and binary forms,
5// with or without modification, are permitted provided that the
6// following conditions are met:
7//
8// The software must be used only for Non-Commercial Use which means any

--- 45 unchanged lines hidden (view full) ---

54// Authors: Gabe Black
55
56//////////////////////////////////////////////////////////////////////////
57//
58// Fault Microop
59//
60//////////////////////////////////////////////////////////////////////////
61
1// Copyright (c) 2007 The Hewlett-Packard Development Company
2// All rights reserved.
3//
4// Redistribution and use of this software in source and binary forms,
5// with or without modification, are permitted provided that the
6// following conditions are met:
7//
8// The software must be used only for Non-Commercial Use which means any

--- 45 unchanged lines hidden (view full) ---

54// Authors: Gabe Black
55
56//////////////////////////////////////////////////////////////////////////
57//
58// Fault Microop
59//
60//////////////////////////////////////////////////////////////////////////
61
62def template MicroFaultExecute {{
63 Fault %(class_name)s ::execute(%(CPU_exec_context)s *xc,
64 Trace::InstRecord *traceData) const
65 {
66 //Return the fault we were constructed with
67 return fault;
68 }
69}};
70
71def template MicroFaultDeclare {{
72 class %(class_name)s : public X86MicroopBase
62output header {{
63 class MicroFault : public X86MicroopBase
73 {
74 protected:
75 Fault fault;
76 void buildMe();
77
78 public:
64 {
65 protected:
66 Fault fault;
67 void buildMe();
68
69 public:
79 %(class_name)s(ExtMachInst _machInst,
80 const char * instMnem,
70 MicroFault(ExtMachInst _machInst, const char * instMnem,
81 bool isMicro, bool isDelayed, bool isFirst, bool isLast,
82 Fault _fault);
83
71 bool isMicro, bool isDelayed, bool isFirst, bool isLast,
72 Fault _fault);
73
84 %(class_name)s(ExtMachInst _machInst,
85 const char * instMnem,
74 MicroFault(ExtMachInst _machInst, const char * instMnem,
86 Fault _fault);
87
88 %(BasicExecDeclare)s
89 };
90}};
91
75 Fault _fault);
76
77 %(BasicExecDeclare)s
78 };
79}};
80
92def template MicroFaultConstructor {{
81output decoder {{
82 Fault MicroFault::execute(%(CPU_exec_context)s *xc,
83 Trace::InstRecord *traceData) const
84 {
85 //Return the fault we were constructed with
86 return fault;
87 }
88}};
93
89
94 inline void %(class_name)s::buildMe()
95 {
96 %(constructor)s;
97 }
98
99 inline %(class_name)s::%(class_name)s(
90output decoder {{
91 inline MicroFault::MicroFault(
100 ExtMachInst machInst, const char * instMnem, Fault _fault) :
92 ExtMachInst machInst, const char * instMnem, Fault _fault) :
101 %(base_class)s(machInst, "%(mnemonic)s", instMnem,
102 false, false, false, false, %(op_class)s), fault(_fault)
93 X86MicroopBase(machInst, "fault", instMnem,
94 false, false, false, false, No_OpClass), fault(_fault)
103 {
95 {
104 buildMe();
105 }
106
96 }
97
107 inline %(class_name)s::%(class_name)s(
98 inline MicroFault::MicroFault(
108 ExtMachInst machInst, const char * instMnem,
109 bool isMicro, bool isDelayed, bool isFirst, bool isLast,
110 Fault _fault) :
99 ExtMachInst machInst, const char * instMnem,
100 bool isMicro, bool isDelayed, bool isFirst, bool isLast,
101 Fault _fault) :
111 %(base_class)s(machInst, "%(mnemonic)s", instMnem,
112 isMicro, isDelayed, isFirst, isLast, %(op_class)s),
102 X86MicroopBase(machInst, "fault", instMnem,
103 isMicro, isDelayed, isFirst, isLast, No_OpClass),
113 fault(_fault)
114 {
104 fault(_fault)
105 {
115 buildMe();
116 }
117}};
118
119let {{
106 }
107}};
108
109let {{
120 # This microop takes in a single parameter, a fault to return.
121 iop = InstObjParams("fault", "GenFault", 'X86MicroopBase', {"code" : ""})
122 header_output += MicroFaultDeclare.subst(iop)
123 decoder_output += MicroFaultConstructor.subst(iop)
124 exec_output += MicroFaultExecute.subst(iop)
110 class Fault(X86Microop):
111 def __init__(self, fault):
112 self.fault = fault
113
114 def getAllocator(self, *microFlags):
115 allocator = '''new MicroFault(machInst, mnemonic
116 %(flags)s, %(fault)s)''' % {
117 "flags" : self.microFlagsText(microFlags),
118 "fault" : self.fault}
119 return allocator
120 microopClasses["fault"] = Fault
125}};
121}};