blob: 766a5b1ad3c1e1d4906b0abc8e29d4222220b519 [file] [log] [blame]
Emily Bernierd0a1eb72015-03-24 16:35:39 -04001// 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_MIPS_INSTRUCTION_CODES_MIPS_H_
6#define V8_COMPILER_MIPS_INSTRUCTION_CODES_MIPS_H_
7
8namespace v8 {
9namespace internal {
10namespace compiler {
11
12// MIPS-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(MipsAdd) \
16 V(MipsAddOvf) \
17 V(MipsSub) \
18 V(MipsSubOvf) \
19 V(MipsMul) \
20 V(MipsMulHigh) \
21 V(MipsMulHighU) \
22 V(MipsDiv) \
23 V(MipsDivU) \
24 V(MipsMod) \
25 V(MipsModU) \
26 V(MipsAnd) \
27 V(MipsOr) \
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000028 V(MipsNor) \
Emily Bernierd0a1eb72015-03-24 16:35:39 -040029 V(MipsXor) \
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000030 V(MipsClz) \
Ben Murdoch097c5b22016-05-18 11:27:45 +010031 V(MipsCtz) \
32 V(MipsPopcnt) \
Ben Murdochc5610432016-08-08 18:44:38 +010033 V(MipsLsa) \
Emily Bernierd0a1eb72015-03-24 16:35:39 -040034 V(MipsShl) \
35 V(MipsShr) \
36 V(MipsSar) \
Ben Murdochc5610432016-08-08 18:44:38 +010037 V(MipsShlPair) \
38 V(MipsShrPair) \
39 V(MipsSarPair) \
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000040 V(MipsExt) \
41 V(MipsIns) \
Emily Bernierd0a1eb72015-03-24 16:35:39 -040042 V(MipsRor) \
43 V(MipsMov) \
44 V(MipsTst) \
45 V(MipsCmp) \
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000046 V(MipsCmpS) \
47 V(MipsAddS) \
48 V(MipsSubS) \
Ben Murdoch61f157c2016-09-16 13:49:30 +010049 V(MipsSubPreserveNanS) \
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000050 V(MipsMulS) \
51 V(MipsDivS) \
52 V(MipsModS) \
53 V(MipsAbsS) \
54 V(MipsSqrtS) \
55 V(MipsMaxS) \
56 V(MipsMinS) \
Emily Bernierd0a1eb72015-03-24 16:35:39 -040057 V(MipsCmpD) \
58 V(MipsAddD) \
59 V(MipsSubD) \
Ben Murdoch61f157c2016-09-16 13:49:30 +010060 V(MipsSubPreserveNanD) \
Emily Bernierd0a1eb72015-03-24 16:35:39 -040061 V(MipsMulD) \
62 V(MipsDivD) \
63 V(MipsModD) \
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000064 V(MipsAbsD) \
Emily Bernierd0a1eb72015-03-24 16:35:39 -040065 V(MipsSqrtD) \
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000066 V(MipsMaxD) \
67 V(MipsMinD) \
Ben Murdochc5610432016-08-08 18:44:38 +010068 V(MipsAddPair) \
69 V(MipsSubPair) \
Ben Murdochda12d292016-06-02 14:46:10 +010070 V(MipsMulPair) \
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000071 V(MipsFloat32RoundDown) \
72 V(MipsFloat32RoundTruncate) \
73 V(MipsFloat32RoundUp) \
74 V(MipsFloat32RoundTiesEven) \
75 V(MipsFloat64RoundDown) \
Emily Bernierd0a1eb72015-03-24 16:35:39 -040076 V(MipsFloat64RoundTruncate) \
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000077 V(MipsFloat64RoundUp) \
78 V(MipsFloat64RoundTiesEven) \
Emily Bernierd0a1eb72015-03-24 16:35:39 -040079 V(MipsCvtSD) \
80 V(MipsCvtDS) \
81 V(MipsTruncWD) \
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000082 V(MipsRoundWD) \
83 V(MipsFloorWD) \
84 V(MipsCeilWD) \
85 V(MipsTruncWS) \
86 V(MipsRoundWS) \
87 V(MipsFloorWS) \
88 V(MipsCeilWS) \
Emily Bernierd0a1eb72015-03-24 16:35:39 -040089 V(MipsTruncUwD) \
Ben Murdoch097c5b22016-05-18 11:27:45 +010090 V(MipsTruncUwS) \
Emily Bernierd0a1eb72015-03-24 16:35:39 -040091 V(MipsCvtDW) \
92 V(MipsCvtDUw) \
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000093 V(MipsCvtSW) \
Ben Murdoch097c5b22016-05-18 11:27:45 +010094 V(MipsCvtSUw) \
Emily Bernierd0a1eb72015-03-24 16:35:39 -040095 V(MipsLb) \
96 V(MipsLbu) \
97 V(MipsSb) \
98 V(MipsLh) \
99 V(MipsLhu) \
100 V(MipsSh) \
101 V(MipsLw) \
102 V(MipsSw) \
103 V(MipsLwc1) \
104 V(MipsSwc1) \
105 V(MipsLdc1) \
106 V(MipsSdc1) \
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000107 V(MipsFloat64ExtractLowWord32) \
108 V(MipsFloat64ExtractHighWord32) \
109 V(MipsFloat64InsertLowWord32) \
110 V(MipsFloat64InsertHighWord32) \
Ben Murdoch61f157c2016-09-16 13:49:30 +0100111 V(MipsFloat64SilenceNaN) \
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000112 V(MipsFloat64Max) \
113 V(MipsFloat64Min) \
114 V(MipsFloat32Max) \
115 V(MipsFloat32Min) \
Emily Bernierd0a1eb72015-03-24 16:35:39 -0400116 V(MipsPush) \
117 V(MipsStoreToStackSlot) \
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000118 V(MipsStackClaim)
Emily Bernierd0a1eb72015-03-24 16:35:39 -0400119
Emily Bernierd0a1eb72015-03-24 16:35:39 -0400120// Addressing modes represent the "shape" of inputs to an instruction.
121// Many instructions support multiple addressing modes. Addressing modes
122// are encoded into the InstructionCode of the instruction and tell the
123// code generator after register allocation which assembler method to call.
124//
125// We use the following local notation for addressing modes:
126//
127// R = register
128// O = register or stack slot
129// D = double register
130// I = immediate (handle, external, int32)
131// MRI = [register + immediate]
132// MRR = [register + register]
133// TODO(plind): Add the new r6 address modes.
134#define TARGET_ADDRESSING_MODE_LIST(V) \
135 V(MRI) /* [%r0 + K] */ \
136 V(MRR) /* [%r0 + %r1] */
137
138
139} // namespace compiler
140} // namespace internal
141} // namespace v8
142
143#endif // V8_COMPILER_MIPS_INSTRUCTION_CODES_MIPS_H_