| Index: src/ia32/assembler-ia32.cc
|
| diff --git a/src/ia32/assembler-ia32.cc b/src/ia32/assembler-ia32.cc
|
| index 5ef07489e99bc513853c937d62ad609b6cc59b19..d77831d4d99afd985a6f5d77bdd27b100eeac877 100644
|
| --- a/src/ia32/assembler-ia32.cc
|
| +++ b/src/ia32/assembler-ia32.cc
|
| @@ -56,6 +56,15 @@
|
| namespace v8 {
|
| namespace internal {
|
|
|
| +Immediate Immediate::EmbeddedNumber(double value) {
|
| + int32_t smi;
|
| + if (DoubleToSmiInteger(value, &smi)) return Immediate(Smi::FromInt(smi));
|
| + Immediate result(0, RelocInfo::EMBEDDED_OBJECT);
|
| + result.is_heap_number_ = true;
|
| + result.value_.heap_number = value;
|
| + return result;
|
| +}
|
| +
|
| // -----------------------------------------------------------------------------
|
| // Implementation of CpuFeatures
|
|
|
| @@ -320,11 +329,13 @@ Assembler::Assembler(IsolateData isolate_data, void* buffer, int buffer_size)
|
| reloc_info_writer.Reposition(buffer_ + buffer_size_, pc_);
|
| }
|
|
|
| -
|
| -void Assembler::GetCode(CodeDesc* desc) {
|
| +void Assembler::GetCode(Isolate* isolate, CodeDesc* desc) {
|
| // Finalize code (at this point overflow() may be true, but the gap ensures
|
| // that we are still not overlapping instructions and relocation info).
|
| DCHECK(pc_ <= reloc_info_writer.pos()); // No overlap.
|
| +
|
| + AllocateRequestedHeapNumbers(isolate);
|
| +
|
| // Set up code descriptor.
|
| desc->buffer = buffer_;
|
| desc->buffer_size = buffer_size_;
|
| @@ -459,7 +470,7 @@ void Assembler::push(const Immediate& x) {
|
| EnsureSpace ensure_space(this);
|
| if (x.is_int8()) {
|
| EMIT(0x6a);
|
| - EMIT(x.x_);
|
| + EMIT(x.immediate());
|
| } else {
|
| EMIT(0x68);
|
| emit(x);
|
| @@ -527,7 +538,7 @@ void Assembler::mov_b(const Operand& dst, const Immediate& src) {
|
| EnsureSpace ensure_space(this);
|
| EMIT(0xC6);
|
| emit_operand(eax, dst);
|
| - EMIT(static_cast<int8_t>(src.x_));
|
| + EMIT(static_cast<int8_t>(src.immediate()));
|
| }
|
|
|
|
|
| @@ -560,8 +571,8 @@ void Assembler::mov_w(const Operand& dst, const Immediate& src) {
|
| EMIT(0x66);
|
| EMIT(0xC7);
|
| emit_operand(eax, dst);
|
| - EMIT(static_cast<int8_t>(src.x_ & 0xff));
|
| - EMIT(static_cast<int8_t>(src.x_ >> 8));
|
| + EMIT(static_cast<int8_t>(src.immediate() & 0xff));
|
| + EMIT(static_cast<int8_t>(src.immediate() >> 8));
|
| }
|
|
|
|
|
| @@ -1304,7 +1315,7 @@ void Assembler::test_b(Register reg, Immediate imm8) {
|
| EMIT(0xA8);
|
| emit_b(imm8);
|
| } else if (reg.is_byte_register()) {
|
| - emit_arith_b(0xF6, 0xC0, reg, static_cast<uint8_t>(imm8.x_));
|
| + emit_arith_b(0xF6, 0xC0, reg, static_cast<uint8_t>(imm8.immediate()));
|
| } else {
|
| EMIT(0x66);
|
| EMIT(0xF7);
|
| @@ -3074,7 +3085,7 @@ void Assembler::emit_arith(int sel, Operand dst, const Immediate& x) {
|
| if (x.is_int8()) {
|
| EMIT(0x83); // using a sign-extended 8-bit immediate.
|
| emit_operand(ireg, dst);
|
| - EMIT(x.x_ & 0xFF);
|
| + EMIT(x.immediate() & 0xFF);
|
| } else if (dst.is_reg(eax)) {
|
| EMIT((sel << 3) | 0x05); // short form if the destination is eax.
|
| emit(x);
|
|
|