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 #include "src/signature.h" | 5 #include "src/signature.h" |
| 6 | 6 |
| 7 #include "src/handles.h" | 7 #include "src/handles.h" |
| 8 #include "src/v8.h" | 8 #include "src/v8.h" |
| 9 #include "src/zone-containers.h" | 9 #include "src/zone-containers.h" |
| 10 | 10 |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 114 body_.push_back(static_cast<byte>(opcode)); | 114 body_.push_back(static_cast<byte>(opcode)); |
| 115 } | 115 } |
| 116 | 116 |
| 117 | 117 |
| 118 void WasmFunctionBuilder::EmitWithU8(WasmOpcode opcode, const byte immediate) { | 118 void WasmFunctionBuilder::EmitWithU8(WasmOpcode opcode, const byte immediate) { |
| 119 body_.push_back(static_cast<byte>(opcode)); | 119 body_.push_back(static_cast<byte>(opcode)); |
| 120 body_.push_back(immediate); | 120 body_.push_back(immediate); |
| 121 } | 121 } |
| 122 | 122 |
| 123 | 123 |
| 124 void WasmFunctionBuilder::EmitWithLocal(WasmOpcode opcode) { | |
| 125 body_.push_back(static_cast<byte>(opcode)); | |
| 126 local_indices_.push_back(static_cast<uint32_t>(body_.size()) - 1); | |
| 127 } | |
| 128 | |
| 129 | |
| 130 uint32_t WasmFunctionBuilder::EmitEditableImmediate(const byte immediate) { | 124 uint32_t WasmFunctionBuilder::EmitEditableImmediate(const byte immediate) { |
| 131 body_.push_back(immediate); | 125 body_.push_back(immediate); |
| 132 return static_cast<uint32_t>(body_.size()) - 1; | 126 return static_cast<uint32_t>(body_.size()) - 1; |
| 133 } | 127 } |
| 134 | 128 |
| 135 | 129 |
| 136 void WasmFunctionBuilder::EditImmediate(uint32_t offset, const byte immediate) { | 130 void WasmFunctionBuilder::EditImmediate(uint32_t offset, const byte immediate) { |
| 137 DCHECK(offset < body_.size()); | 131 DCHECK(offset < body_.size()); |
| 138 body_[offset] = immediate; | 132 body_[offset] = immediate; |
| 139 } | 133 } |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 363 return nullptr; | 357 return nullptr; |
| 364 } | 358 } |
| 365 } | 359 } |
| 366 | 360 |
| 367 | 361 |
| 368 void WasmModuleBuilder::AddDataSegment(WasmDataSegmentEncoder* data) { | 362 void WasmModuleBuilder::AddDataSegment(WasmDataSegmentEncoder* data) { |
| 369 data_segments_.push_back(data); | 363 data_segments_.push_back(data); |
| 370 } | 364 } |
| 371 | 365 |
| 372 | 366 |
| 373 int WasmModuleBuilder::CompareFunctionSigs::operator()(FunctionSig* a, | 367 bool WasmModuleBuilder::CompareFunctionSigs::operator()(FunctionSig* a, |
| 374 FunctionSig* b) const { | 368 FunctionSig* b) const { |
| 375 if (a->return_count() < b->return_count()) return -1; | 369 if (a->return_count() < b->return_count()) return true; |
| 376 if (a->return_count() > b->return_count()) return 1; | 370 if (a->return_count() > b->return_count()) return false; |
|
bradnelson
2016/01/20 00:40:52
Ah, yeah, that would rather throw a wrench in thin
| |
| 377 if (a->parameter_count() < b->parameter_count()) return -1; | 371 if (a->parameter_count() < b->parameter_count()) return true; |
| 378 if (a->parameter_count() > b->parameter_count()) return 1; | 372 if (a->parameter_count() > b->parameter_count()) return false; |
| 379 for (size_t r = 0; r < a->return_count(); r++) { | 373 for (size_t r = 0; r < a->return_count(); r++) { |
| 380 if (a->GetReturn(r) < b->GetReturn(r)) return -1; | 374 if (a->GetReturn(r) < b->GetReturn(r)) return true; |
| 381 if (a->GetReturn(r) > b->GetReturn(r)) return 1; | 375 if (a->GetReturn(r) > b->GetReturn(r)) return false; |
| 382 } | 376 } |
| 383 for (size_t p = 0; p < a->parameter_count(); p++) { | 377 for (size_t p = 0; p < a->parameter_count(); p++) { |
| 384 if (a->GetParam(p) < b->GetParam(p)) return -1; | 378 if (a->GetParam(p) < b->GetParam(p)) return true; |
| 385 if (a->GetParam(p) > b->GetParam(p)) return 1; | 379 if (a->GetParam(p) > b->GetParam(p)) return false; |
| 386 } | 380 } |
| 387 return 0; | 381 return false; |
| 388 } | 382 } |
| 389 | 383 |
| 390 | 384 |
| 391 uint16_t WasmModuleBuilder::AddSignature(FunctionSig* sig) { | 385 uint16_t WasmModuleBuilder::AddSignature(FunctionSig* sig) { |
| 392 SignatureMap::iterator pos = signature_map_.find(sig); | 386 SignatureMap::iterator pos = signature_map_.find(sig); |
| 393 if (pos != signature_map_.end()) { | 387 if (pos != signature_map_.end()) { |
| 394 return pos->second; | 388 return pos->second; |
| 395 } else { | 389 } else { |
| 396 uint16_t index = static_cast<uint16_t>(signatures_.size()); | 390 uint16_t index = static_cast<uint16_t>(signatures_.size()); |
| 397 signature_map_[sig] = index; | 391 signature_map_[sig] = index; |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 583 next = next | 0x80; | 577 next = next | 0x80; |
| 584 } | 578 } |
| 585 output.push_back(next); | 579 output.push_back(next); |
| 586 shift += 7; | 580 shift += 7; |
| 587 } while ((next & 0x80) != 0); | 581 } while ((next & 0x80) != 0); |
| 588 return output; | 582 return output; |
| 589 } | 583 } |
| 590 } // namespace wasm | 584 } // namespace wasm |
| 591 } // namespace internal | 585 } // namespace internal |
| 592 } // namespace v8 | 586 } // namespace v8 |
| OLD | NEW |