Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_WASM_MACRO_GEN_H_ | 5 #ifndef V8_WASM_MACRO_GEN_H_ |
| 6 #define V8_WASM_MACRO_GEN_H_ | 6 #define V8_WASM_MACRO_GEN_H_ |
| 7 | 7 |
| 8 #include "src/wasm/wasm-opcodes.h" | 8 #include "src/wasm/wasm-opcodes.h" |
| 9 | 9 |
| 10 // Convenience macros for building Wasm bytecode directly into a byte array. | 10 // Convenience macros for building Wasm bytecode directly into a byte array. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 45 #define WASM_CASE(x) static_cast<byte>(x), static_cast<byte>(x >> 8) | 45 #define WASM_CASE(x) static_cast<byte>(x), static_cast<byte>(x >> 8) |
| 46 #define WASM_CASE_BR(x) static_cast<byte>(x), static_cast<byte>(0x80 | (x) >> 8) | 46 #define WASM_CASE_BR(x) static_cast<byte>(x), static_cast<byte>(0x80 | (x) >> 8) |
| 47 | 47 |
| 48 //------------------------------------------------------------------------------ | 48 //------------------------------------------------------------------------------ |
| 49 // Misc expressions. | 49 // Misc expressions. |
| 50 //------------------------------------------------------------------------------ | 50 //------------------------------------------------------------------------------ |
| 51 #define WASM_ID(...) __VA_ARGS__ | 51 #define WASM_ID(...) __VA_ARGS__ |
| 52 #define WASM_ZERO kExprI8Const, 0 | 52 #define WASM_ZERO kExprI8Const, 0 |
| 53 #define WASM_ONE kExprI8Const, 1 | 53 #define WASM_ONE kExprI8Const, 1 |
| 54 #define WASM_I8(val) kExprI8Const, static_cast<byte>(val) | 54 #define WASM_I8(val) kExprI8Const, static_cast<byte>(val) |
| 55 #define WASM_I32(val) \ | 55 |
| 56 kExprI32Const, static_cast<byte>(val), static_cast<byte>(val >> 8), \ | 56 //------------------------------------------------------------------------------ |
| 57 static_cast<byte>(val >> 16), static_cast<byte>(val >> 24) | 57 // Int32 Const operations |
| 58 #define WASM_I64(val) \ | 58 //------------------------------------------------------------------------------ |
| 59 kExprI64Const, static_cast<byte>(static_cast<uint64_t>(val)), \ | 59 namespace v8 { |
| 60 static_cast<byte>(static_cast<uint64_t>(val) >> 8), \ | 60 namespace internal { |
| 61 static_cast<byte>(static_cast<uint64_t>(val) >> 16), \ | 61 namespace wasm { |
| 62 static_cast<byte>(static_cast<uint64_t>(val) >> 24), \ | 62 |
| 63 static_cast<byte>(static_cast<uint64_t>(val) >> 32), \ | 63 #define I32V_MIN(length) -(1 << (6 + (7 * ((length) - 1)))) |
| 64 static_cast<byte>(static_cast<uint64_t>(val) >> 40), \ | 64 #define I32V_MAX(length) ((1 << (6 + (7 * ((length) - 1)))) - 1) |
| 65 static_cast<byte>(static_cast<uint64_t>(val) >> 48), \ | 65 |
| 66 static_cast<byte>(static_cast<uint64_t>(val) >> 56) | 66 #define I32V_IN_RANGE(value, length) \ |
| 67 ((value) >= I32V_MIN(length) && (value) <= I32V_MAX(length)) | |
| 68 | |
| 69 inline void CheckI32v(int32_t value, int length) { | |
| 70 DCHECK(length >= 1 && length <= 5); | |
| 71 DCHECK(length == 5 || I32V_IN_RANGE(value, length)); | |
| 72 DCHECK(length == 1 || !I32V_IN_RANGE(value, length - 1)); | |
| 73 } | |
| 74 | |
| 75 } // namespace wasm | |
| 76 } // namespace internal | |
| 77 } // namespace v8 | |
| 78 | |
| 79 #define WASM_I32V(val) kExprI32Const, U32V_5(val) | |
| 80 | |
| 81 #define WASM_I32V_1(val) \ | |
| 82 static_cast<byte>(CheckI32v((val), 1), kExprI32Const), U32V_1(val) | |
| 83 #define WASM_I32V_2(val) \ | |
| 84 static_cast<byte>(CheckI32v((val), 2), kExprI32Const), U32V_2(val) | |
| 85 #define WASM_I32V_3(val) \ | |
| 86 static_cast<byte>(CheckI32v((val), 3), kExprI32Const), U32V_3(val) | |
| 87 #define WASM_I32V_4(val) \ | |
| 88 static_cast<byte>(CheckI32v((val), 4), kExprI32Const), U32V_4(val) | |
| 89 #define WASM_I32V_5(val) \ | |
| 90 static_cast<byte>(CheckI32v((val), 5), kExprI32Const), U32V_5(val) | |
| 91 | |
| 92 //------------------------------------------------------------------------------ | |
| 93 // Int64 Const operations | |
| 94 //------------------------------------------------------------------------------ | |
| 95 namespace v8 { | |
|
titzer
2016/03/03 23:22:52
You can combine these namespaces.
binji
2016/03/03 23:47:32
Sorry, not sure what you mean... is this some new
| |
| 96 namespace internal { | |
| 97 namespace wasm { | |
| 98 | |
| 99 #define I64V_MIN(length) -(1LL << (6 + (7 * ((length)-1)))) | |
| 100 #define I64V_MAX(length) ((1LL << (6 + 7 * ((length)-1))) - 1) | |
| 101 | |
| 102 #define I64V_IN_RANGE(value, length) \ | |
| 103 ((value) >= I64V_MIN(length) && (value) <= I64V_MAX(length)) | |
| 104 | |
| 105 inline void CheckI64v(int64_t value, int length) { | |
| 106 DCHECK(length >= 1 && length <= 10); | |
| 107 DCHECK(length == 10 || I64V_IN_RANGE(value, length)); | |
| 108 DCHECK(length == 1 || !I64V_IN_RANGE(value, length - 1)); | |
| 109 } | |
| 110 | |
| 111 } // namespace wasm | |
| 112 } // namespace internal | |
| 113 } // namespace v8 | |
| 114 | |
| 115 #define WASM_I64V(val) \ | |
| 116 kExprI64Const, static_cast<byte>(((val)&MASK_7) | 0x80), \ | |
| 117 static_cast<byte>((((val) >> 7) & MASK_7) | 0x80), \ | |
| 118 static_cast<byte>((((val) >> 14) & MASK_7) | 0x80), \ | |
| 119 static_cast<byte>((((val) >> 21) & MASK_7) | 0x80), \ | |
| 120 static_cast<byte>((((val) >> 28) & MASK_7) | 0x80), \ | |
| 121 static_cast<byte>((((val) >> 35) & MASK_7) | 0x80), \ | |
| 122 static_cast<byte>((((val) >> 42) & MASK_7) | 0x80), \ | |
| 123 static_cast<byte>((((val) >> 49) & MASK_7) | 0x80), \ | |
| 124 static_cast<byte>((((val) >> 56) & MASK_7) | 0x80), \ | |
| 125 static_cast<byte>(((val) >> 63) & MASK_7) | |
| 126 | |
| 127 #define WASM_I64V_1(val) \ | |
| 128 static_cast<byte>(CheckI64v((val), 1), kExprI64Const), \ | |
| 129 static_cast<byte>((val)&MASK_7) | |
| 130 #define WASM_I64V_2(val) \ | |
| 131 static_cast<byte>(CheckI64v((val), 2), kExprI64Const), \ | |
| 132 static_cast<byte>(((val)&MASK_7) | 0x80), \ | |
| 133 static_cast<byte>(((val) >> 7) & MASK_7) | |
| 134 #define WASM_I64V_3(val) \ | |
| 135 static_cast<byte>(CheckI64v((val), 3), kExprI64Const), \ | |
| 136 static_cast<byte>(((val)&MASK_7) | 0x80), \ | |
| 137 static_cast<byte>((((val) >> 7) & MASK_7) | 0x80), \ | |
| 138 static_cast<byte>(((val) >> 14) & MASK_7) | |
| 139 #define WASM_I64V_4(val) \ | |
| 140 static_cast<byte>(CheckI64v((val), 4), kExprI64Const), \ | |
| 141 static_cast<byte>(((val)&MASK_7) | 0x80), \ | |
| 142 static_cast<byte>((((val) >> 7) & MASK_7) | 0x80), \ | |
| 143 static_cast<byte>((((val) >> 14) & MASK_7) | 0x80), \ | |
| 144 static_cast<byte>(((val) >> 21) & MASK_7) | |
| 145 #define WASM_I64V_5(val) \ | |
| 146 static_cast<byte>(CheckI64v((val), 5), kExprI64Const), \ | |
| 147 static_cast<byte>(((val)&MASK_7) | 0x80), \ | |
| 148 static_cast<byte>((((val) >> 7) & MASK_7) | 0x80), \ | |
| 149 static_cast<byte>((((val) >> 14) & MASK_7) | 0x80), \ | |
| 150 static_cast<byte>((((val) >> 21) & MASK_7) | 0x80), \ | |
| 151 static_cast<byte>(((val) >> 28) & MASK_7) | |
| 152 #define WASM_I64V_6(val) \ | |
| 153 static_cast<byte>(CheckI64v((val), 6), kExprI64Const), \ | |
| 154 static_cast<byte>(((val)&MASK_7) | 0x80), \ | |
| 155 static_cast<byte>((((val) >> 7) & MASK_7) | 0x80), \ | |
| 156 static_cast<byte>((((val) >> 14) & MASK_7) | 0x80), \ | |
| 157 static_cast<byte>((((val) >> 21) & MASK_7) | 0x80), \ | |
| 158 static_cast<byte>((((val) >> 28) & MASK_7) | 0x80), \ | |
| 159 static_cast<byte>(((val) >> 35) & MASK_7) | |
| 160 #define WASM_I64V_7(val) \ | |
| 161 static_cast<byte>(CheckI64v((val), 7), kExprI64Const), \ | |
| 162 static_cast<byte>(((val)&MASK_7) | 0x80), \ | |
| 163 static_cast<byte>((((val) >> 7) & MASK_7) | 0x80), \ | |
| 164 static_cast<byte>((((val) >> 14) & MASK_7) | 0x80), \ | |
| 165 static_cast<byte>((((val) >> 21) & MASK_7) | 0x80), \ | |
| 166 static_cast<byte>((((val) >> 28) & MASK_7) | 0x80), \ | |
| 167 static_cast<byte>((((val) >> 35) & MASK_7) | 0x80), \ | |
| 168 static_cast<byte>(((val) >> 42) & MASK_7) | |
| 169 #define WASM_I64V_8(val) \ | |
| 170 static_cast<byte>(CheckI64v((val), 8), kExprI64Const), \ | |
| 171 static_cast<byte>(((val)&MASK_7) | 0x80), \ | |
| 172 static_cast<byte>((((val) >> 7) & MASK_7) | 0x80), \ | |
| 173 static_cast<byte>((((val) >> 14) & MASK_7) | 0x80), \ | |
| 174 static_cast<byte>((((val) >> 21) & MASK_7) | 0x80), \ | |
| 175 static_cast<byte>((((val) >> 28) & MASK_7) | 0x80), \ | |
| 176 static_cast<byte>((((val) >> 35) & MASK_7) | 0x80), \ | |
| 177 static_cast<byte>((((val) >> 42) & MASK_7) | 0x80), \ | |
| 178 static_cast<byte>(((val) >> 49) & MASK_7) | |
| 179 #define WASM_I64V_9(val) \ | |
| 180 static_cast<byte>(CheckI64v((val), 9), kExprI64Const), \ | |
| 181 static_cast<byte>(((val)&MASK_7) | 0x80), \ | |
| 182 static_cast<byte>((((val) >> 7) & MASK_7) | 0x80), \ | |
| 183 static_cast<byte>((((val) >> 14) & MASK_7) | 0x80), \ | |
| 184 static_cast<byte>((((val) >> 21) & MASK_7) | 0x80), \ | |
| 185 static_cast<byte>((((val) >> 28) & MASK_7) | 0x80), \ | |
| 186 static_cast<byte>((((val) >> 35) & MASK_7) | 0x80), \ | |
| 187 static_cast<byte>((((val) >> 42) & MASK_7) | 0x80), \ | |
| 188 static_cast<byte>((((val) >> 49) & MASK_7) | 0x80), \ | |
| 189 static_cast<byte>(((val) >> 56) & MASK_7) | |
| 190 #define WASM_I64V_10(val) \ | |
| 191 static_cast<byte>(CheckI64v((val), 10), kExprI64Const), \ | |
| 192 static_cast<byte>(((val)&MASK_7) | 0x80), \ | |
| 193 static_cast<byte>((((val) >> 7) & MASK_7) | 0x80), \ | |
| 194 static_cast<byte>((((val) >> 14) & MASK_7) | 0x80), \ | |
| 195 static_cast<byte>((((val) >> 21) & MASK_7) | 0x80), \ | |
| 196 static_cast<byte>((((val) >> 28) & MASK_7) | 0x80), \ | |
| 197 static_cast<byte>((((val) >> 35) & MASK_7) | 0x80), \ | |
| 198 static_cast<byte>((((val) >> 42) & MASK_7) | 0x80), \ | |
| 199 static_cast<byte>((((val) >> 49) & MASK_7) | 0x80), \ | |
| 200 static_cast<byte>((((val) >> 56) & MASK_7) | 0x80), \ | |
| 201 static_cast<byte>(((val) >> 63) & MASK_7) | |
| 202 | |
| 67 #define WASM_F32(val) \ | 203 #define WASM_F32(val) \ |
| 68 kExprF32Const, \ | 204 kExprF32Const, \ |
| 69 static_cast<byte>(bit_cast<int32_t>(static_cast<float>(val))), \ | 205 static_cast<byte>(bit_cast<int32_t>(static_cast<float>(val))), \ |
| 70 static_cast<byte>(bit_cast<uint32_t>(static_cast<float>(val)) >> 8), \ | 206 static_cast<byte>(bit_cast<uint32_t>(static_cast<float>(val)) >> 8), \ |
| 71 static_cast<byte>(bit_cast<uint32_t>(static_cast<float>(val)) >> 16), \ | 207 static_cast<byte>(bit_cast<uint32_t>(static_cast<float>(val)) >> 16), \ |
| 72 static_cast<byte>(bit_cast<uint32_t>(static_cast<float>(val)) >> 24) | 208 static_cast<byte>(bit_cast<uint32_t>(static_cast<float>(val)) >> 24) |
| 73 #define WASM_F64(val) \ | 209 #define WASM_F64(val) \ |
| 74 kExprF64Const, static_cast<byte>(bit_cast<uint64_t>(val)), \ | 210 kExprF64Const, static_cast<byte>(bit_cast<uint64_t>(val)), \ |
| 75 static_cast<byte>(bit_cast<uint64_t>(val) >> 8), \ | 211 static_cast<byte>(bit_cast<uint64_t>(val) >> 8), \ |
| 76 static_cast<byte>(bit_cast<uint64_t>(val) >> 16), \ | 212 static_cast<byte>(bit_cast<uint64_t>(val) >> 16), \ |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 296 #define U32V_4(x) \ | 432 #define U32V_4(x) \ |
| 297 static_cast<byte>((x & MASK_7) | 0x80), \ | 433 static_cast<byte>((x & MASK_7) | 0x80), \ |
| 298 static_cast<byte>(((x >> 7) & MASK_7) | 0x80), \ | 434 static_cast<byte>(((x >> 7) & MASK_7) | 0x80), \ |
| 299 static_cast<byte>(((x >> 14) & MASK_7) | 0x80), \ | 435 static_cast<byte>(((x >> 14) & MASK_7) | 0x80), \ |
| 300 static_cast<byte>((x >> 21) & MASK_7) | 436 static_cast<byte>((x >> 21) & MASK_7) |
| 301 #define U32V_5(x) \ | 437 #define U32V_5(x) \ |
| 302 static_cast<byte>((x & MASK_7) | 0x80), \ | 438 static_cast<byte>((x & MASK_7) | 0x80), \ |
| 303 static_cast<byte>(((x >> 7) & MASK_7) | 0x80), \ | 439 static_cast<byte>(((x >> 7) & MASK_7) | 0x80), \ |
| 304 static_cast<byte>(((x >> 14) & MASK_7) | 0x80), \ | 440 static_cast<byte>(((x >> 14) & MASK_7) | 0x80), \ |
| 305 static_cast<byte>(((x >> 21) & MASK_7) | 0x80), \ | 441 static_cast<byte>(((x >> 21) & MASK_7) | 0x80), \ |
| 306 static_cast<byte>((x >> 28) & 0xF) | 442 static_cast<byte>(((x >> 28) & MASK_7)) |
| 307 | 443 |
| 308 #endif // V8_WASM_MACRO_GEN_H_ | 444 #endif // V8_WASM_MACRO_GEN_H_ |
| OLD | NEW |