V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
instruction-codes-ppc.h
1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_COMPILER_BACKEND_PPC_INSTRUCTION_CODES_PPC_H_
6 #define V8_COMPILER_BACKEND_PPC_INSTRUCTION_CODES_PPC_H_
7 
8 namespace v8 {
9 namespace internal {
10 namespace compiler {
11 
12 // PPC-specific opcodes that specify which assembly sequence to emit.
13 // Most opcodes specify a single instruction.
14 #define TARGET_ARCH_OPCODE_LIST(V) \
15  V(PPC_And) \
16  V(PPC_AndComplement) \
17  V(PPC_Or) \
18  V(PPC_OrComplement) \
19  V(PPC_Xor) \
20  V(PPC_ShiftLeft32) \
21  V(PPC_ShiftLeft64) \
22  V(PPC_ShiftLeftPair) \
23  V(PPC_ShiftRight32) \
24  V(PPC_ShiftRight64) \
25  V(PPC_ShiftRightPair) \
26  V(PPC_ShiftRightAlg32) \
27  V(PPC_ShiftRightAlg64) \
28  V(PPC_ShiftRightAlgPair) \
29  V(PPC_RotRight32) \
30  V(PPC_RotRight64) \
31  V(PPC_Not) \
32  V(PPC_RotLeftAndMask32) \
33  V(PPC_RotLeftAndClear64) \
34  V(PPC_RotLeftAndClearLeft64) \
35  V(PPC_RotLeftAndClearRight64) \
36  V(PPC_Add32) \
37  V(PPC_Add64) \
38  V(PPC_AddWithOverflow32) \
39  V(PPC_AddPair) \
40  V(PPC_AddDouble) \
41  V(PPC_Sub) \
42  V(PPC_SubWithOverflow32) \
43  V(PPC_SubPair) \
44  V(PPC_SubDouble) \
45  V(PPC_Mul32) \
46  V(PPC_Mul32WithHigh32) \
47  V(PPC_Mul64) \
48  V(PPC_MulHigh32) \
49  V(PPC_MulHighU32) \
50  V(PPC_MulPair) \
51  V(PPC_MulDouble) \
52  V(PPC_Div32) \
53  V(PPC_Div64) \
54  V(PPC_DivU32) \
55  V(PPC_DivU64) \
56  V(PPC_DivDouble) \
57  V(PPC_Mod32) \
58  V(PPC_Mod64) \
59  V(PPC_ModU32) \
60  V(PPC_ModU64) \
61  V(PPC_ModDouble) \
62  V(PPC_Neg) \
63  V(PPC_NegDouble) \
64  V(PPC_SqrtDouble) \
65  V(PPC_FloorDouble) \
66  V(PPC_CeilDouble) \
67  V(PPC_TruncateDouble) \
68  V(PPC_RoundDouble) \
69  V(PPC_MaxDouble) \
70  V(PPC_MinDouble) \
71  V(PPC_AbsDouble) \
72  V(PPC_Cntlz32) \
73  V(PPC_Cntlz64) \
74  V(PPC_Popcnt32) \
75  V(PPC_Popcnt64) \
76  V(PPC_Cmp32) \
77  V(PPC_Cmp64) \
78  V(PPC_CmpDouble) \
79  V(PPC_Tst32) \
80  V(PPC_Tst64) \
81  V(PPC_Push) \
82  V(PPC_PushFrame) \
83  V(PPC_StoreToStackSlot) \
84  V(PPC_ExtendSignWord8) \
85  V(PPC_ExtendSignWord16) \
86  V(PPC_ExtendSignWord32) \
87  V(PPC_Uint32ToUint64) \
88  V(PPC_Int64ToInt32) \
89  V(PPC_Int64ToFloat32) \
90  V(PPC_Int64ToDouble) \
91  V(PPC_Uint64ToFloat32) \
92  V(PPC_Uint64ToDouble) \
93  V(PPC_Int32ToFloat32) \
94  V(PPC_Int32ToDouble) \
95  V(PPC_Uint32ToFloat32) \
96  V(PPC_Uint32ToDouble) \
97  V(PPC_Float32ToDouble) \
98  V(PPC_Float64SilenceNaN) \
99  V(PPC_DoubleToInt32) \
100  V(PPC_DoubleToUint32) \
101  V(PPC_DoubleToInt64) \
102  V(PPC_DoubleToUint64) \
103  V(PPC_DoubleToFloat32) \
104  V(PPC_DoubleExtractLowWord32) \
105  V(PPC_DoubleExtractHighWord32) \
106  V(PPC_DoubleInsertLowWord32) \
107  V(PPC_DoubleInsertHighWord32) \
108  V(PPC_DoubleConstruct) \
109  V(PPC_BitcastInt32ToFloat32) \
110  V(PPC_BitcastFloat32ToInt32) \
111  V(PPC_BitcastInt64ToDouble) \
112  V(PPC_BitcastDoubleToInt64) \
113  V(PPC_LoadWordS8) \
114  V(PPC_LoadWordU8) \
115  V(PPC_LoadWordS16) \
116  V(PPC_LoadWordU16) \
117  V(PPC_LoadWordS32) \
118  V(PPC_LoadWordU32) \
119  V(PPC_LoadWord64) \
120  V(PPC_LoadFloat32) \
121  V(PPC_LoadDouble) \
122  V(PPC_StoreWord8) \
123  V(PPC_StoreWord16) \
124  V(PPC_StoreWord32) \
125  V(PPC_StoreWord64) \
126  V(PPC_StoreFloat32) \
127  V(PPC_StoreDouble) \
128  V(PPC_ByteRev32) \
129  V(PPC_ByteRev64) \
130  V(PPC_AtomicStoreUint8) \
131  V(PPC_AtomicStoreUint16) \
132  V(PPC_AtomicStoreWord32) \
133  V(PPC_AtomicStoreWord64) \
134  V(PPC_AtomicLoadUint8) \
135  V(PPC_AtomicLoadUint16) \
136  V(PPC_AtomicLoadWord32) \
137  V(PPC_AtomicLoadWord64) \
138  V(PPC_AtomicExchangeUint8) \
139  V(PPC_AtomicExchangeUint16) \
140  V(PPC_AtomicExchangeWord32) \
141  V(PPC_AtomicExchangeWord64) \
142  V(PPC_AtomicCompareExchangeUint8) \
143  V(PPC_AtomicCompareExchangeUint16) \
144  V(PPC_AtomicCompareExchangeWord32) \
145  V(PPC_AtomicCompareExchangeWord64) \
146  V(PPC_AtomicAddUint8) \
147  V(PPC_AtomicAddUint16) \
148  V(PPC_AtomicAddUint32) \
149  V(PPC_AtomicAddUint64) \
150  V(PPC_AtomicAddInt8) \
151  V(PPC_AtomicAddInt16) \
152  V(PPC_AtomicAddInt32) \
153  V(PPC_AtomicAddInt64) \
154  V(PPC_AtomicSubUint8) \
155  V(PPC_AtomicSubUint16) \
156  V(PPC_AtomicSubUint32) \
157  V(PPC_AtomicSubUint64) \
158  V(PPC_AtomicSubInt8) \
159  V(PPC_AtomicSubInt16) \
160  V(PPC_AtomicSubInt32) \
161  V(PPC_AtomicSubInt64) \
162  V(PPC_AtomicAndUint8) \
163  V(PPC_AtomicAndUint16) \
164  V(PPC_AtomicAndUint32) \
165  V(PPC_AtomicAndUint64) \
166  V(PPC_AtomicAndInt8) \
167  V(PPC_AtomicAndInt16) \
168  V(PPC_AtomicAndInt32) \
169  V(PPC_AtomicAndInt64) \
170  V(PPC_AtomicOrUint8) \
171  V(PPC_AtomicOrUint16) \
172  V(PPC_AtomicOrUint32) \
173  V(PPC_AtomicOrUint64) \
174  V(PPC_AtomicOrInt8) \
175  V(PPC_AtomicOrInt16) \
176  V(PPC_AtomicOrInt32) \
177  V(PPC_AtomicOrInt64) \
178  V(PPC_AtomicXorUint8) \
179  V(PPC_AtomicXorUint16) \
180  V(PPC_AtomicXorUint32) \
181  V(PPC_AtomicXorUint64) \
182  V(PPC_AtomicXorInt8) \
183  V(PPC_AtomicXorInt16) \
184  V(PPC_AtomicXorInt32) \
185  V(PPC_AtomicXorInt64)
186 
187 // Addressing modes represent the "shape" of inputs to an instruction.
188 // Many instructions support multiple addressing modes. Addressing modes
189 // are encoded into the InstructionCode of the instruction and tell the
190 // code generator after register allocation which assembler method to call.
191 //
192 // We use the following local notation for addressing modes:
193 //
194 // R = register
195 // O = register or stack slot
196 // D = double register
197 // I = immediate (handle, external, int32)
198 // MRI = [register + immediate]
199 // MRR = [register + register]
200 #define TARGET_ADDRESSING_MODE_LIST(V) \
201  V(MRI) /* [%r0 + K] */ \
202  V(MRR) /* [%r0 + %r1] */
203 
204 } // namespace compiler
205 } // namespace internal
206 } // namespace v8
207 
208 #endif // V8_COMPILER_BACKEND_PPC_INSTRUCTION_CODES_PPC_H_
Definition: libplatform.h:13