| Index: src/s390/assembler-s390.cc
|
| diff --git a/src/s390/assembler-s390.cc b/src/s390/assembler-s390.cc
|
| index 35305fc07487b8507b0e6483f9cc5c04efade2d7..5fbe03d1699863d60a737d60ef62e793742c8d1d 100644
|
| --- a/src/s390/assembler-s390.cc
|
| +++ b/src/s390/assembler-s390.cc
|
| @@ -313,15 +313,24 @@ Operand::Operand(Handle<Object> handle) {
|
| // Verify all Objects referred by code are NOT in new space.
|
| Object* obj = *handle;
|
| if (obj->IsHeapObject()) {
|
| - imm_ = reinterpret_cast<intptr_t>(handle.location());
|
| + value_.immediate = reinterpret_cast<intptr_t>(handle.location());
|
| rmode_ = RelocInfo::EMBEDDED_OBJECT;
|
| } else {
|
| // no relocation needed
|
| - imm_ = reinterpret_cast<intptr_t>(obj);
|
| + value_.immediate = reinterpret_cast<intptr_t>(obj);
|
| rmode_ = kRelocInfo_NONEPTR;
|
| }
|
| }
|
|
|
| +Operand Operand::EmbeddedNumber(double value) {
|
| + int32_t smi;
|
| + if (DoubleToSmiInteger(value, &smi)) return Operand(Smi::FromInt(smi));
|
| + Operand result(0, RelocInfo::EMBEDDED_OBJECT);
|
| + result.is_heap_number_ = true;
|
| + result.value_.heap_number = value;
|
| + return result;
|
| +}
|
| +
|
| MemOperand::MemOperand(Register rn, int32_t offset) {
|
| baseRegister = rn;
|
| indexRegister = r0;
|
| @@ -348,9 +357,11 @@ Assembler::Assembler(IsolateData isolate_data, void* buffer, int buffer_size)
|
| relocations_.reserve(128);
|
| }
|
|
|
| -void Assembler::GetCode(CodeDesc* desc) {
|
| +void Assembler::GetCode(Isolate* isolate, CodeDesc* desc) {
|
| EmitRelocations();
|
|
|
| + AllocateRequestedHeapNumbers(isolate);
|
| +
|
| // Set up code descriptor.
|
| desc->buffer = buffer_;
|
| desc->buffer_size = buffer_size_;
|
| @@ -651,9 +662,9 @@ void Assembler::nop(int type) {
|
|
|
| void Assembler::ri_form(Opcode op, Register r1, const Operand& i2) {
|
| DCHECK(is_uint12(op));
|
| - DCHECK(is_uint16(i2.imm_) || is_int16(i2.imm_));
|
| + DCHECK(is_uint16(i2.immediate()) || is_int16(i2.immediate()));
|
| emit4bytes((op & 0xFF0) * B20 | r1.code() * B20 | (op & 0xF) * B16 |
|
| - (i2.imm_ & 0xFFFF));
|
| + (i2.immediate() & 0xFFFF));
|
| }
|
|
|
| // RI2 format: <insn> M1,I2
|
| @@ -667,9 +678,9 @@ void Assembler::ri_form(Opcode op, Register r1, const Operand& i2) {
|
| void Assembler::ri_form(Opcode op, Condition m1, const Operand& i2) {
|
| DCHECK(is_uint12(op));
|
| DCHECK(is_uint4(m1));
|
| - DCHECK(op == BRC ? is_int16(i2.imm_) : is_uint16(i2.imm_));
|
| + DCHECK(op == BRC ? is_int16(i2.immediate()) : is_uint16(i2.immediate()));
|
| emit4bytes((op & 0xFF0) * B20 | m1 * B20 | (op & 0xF) * B16 |
|
| - (i2.imm_ & 0xFFFF));
|
| + (i2.immediate() & 0xFFFF));
|
| }
|
|
|
| // RIE-f format: <insn> R1,R2,I3,I4,I5
|
| @@ -681,15 +692,15 @@ void Assembler::rie_f_form(Opcode op, Register r1, Register r2,
|
| const Operand& i3, const Operand& i4,
|
| const Operand& i5) {
|
| DCHECK(is_uint16(op));
|
| - DCHECK(is_uint8(i3.imm_));
|
| - DCHECK(is_uint8(i4.imm_));
|
| - DCHECK(is_uint8(i5.imm_));
|
| + DCHECK(is_uint8(i3.immediate()));
|
| + DCHECK(is_uint8(i4.immediate()));
|
| + DCHECK(is_uint8(i5.immediate()));
|
| uint64_t code = (static_cast<uint64_t>(op & 0xFF00)) * B32 |
|
| (static_cast<uint64_t>(r1.code())) * B36 |
|
| (static_cast<uint64_t>(r2.code())) * B32 |
|
| - (static_cast<uint64_t>(i3.imm_)) * B24 |
|
| - (static_cast<uint64_t>(i4.imm_)) * B16 |
|
| - (static_cast<uint64_t>(i5.imm_)) * B8 |
|
| + (static_cast<uint64_t>(i3.immediate())) * B24 |
|
| + (static_cast<uint64_t>(i4.immediate())) * B16 |
|
| + (static_cast<uint64_t>(i5.immediate())) * B8 |
|
| (static_cast<uint64_t>(op & 0x00FF));
|
| emit6bytes(code);
|
| }
|
| @@ -707,11 +718,11 @@ void Assembler::rie_f_form(Opcode op, Register r1, Register r2,
|
| void Assembler::rie_form(Opcode op, Register r1, Register r3,
|
| const Operand& i2) {
|
| DCHECK(is_uint16(op));
|
| - DCHECK(is_int16(i2.imm_));
|
| + DCHECK(is_int16(i2.immediate()));
|
| uint64_t code = (static_cast<uint64_t>(op & 0xFF00)) * B32 |
|
| (static_cast<uint64_t>(r1.code())) * B36 |
|
| (static_cast<uint64_t>(r3.code())) * B32 |
|
| - (static_cast<uint64_t>(i2.imm_ & 0xFFFF)) * B16 |
|
| + (static_cast<uint64_t>(i2.immediate() & 0xFFFF)) * B16 |
|
| (static_cast<uint64_t>(op & 0x00FF));
|
| emit6bytes(code);
|
| }
|
| @@ -768,8 +779,9 @@ void Assembler::rs_form(Opcode op, Register r1, Condition m3, Register b2,
|
| void Assembler::rsi_form(Opcode op, Register r1, Register r3,
|
| const Operand& i2) {
|
| DCHECK(is_uint8(op));
|
| - DCHECK(is_uint16(i2.imm_));
|
| - emit4bytes(op * B24 | r1.code() * B20 | r3.code() * B16 | (i2.imm_ & 0xFFFF));
|
| + DCHECK(is_uint16(i2.immediate()));
|
| + emit4bytes(op * B24 | r1.code() * B20 | r3.code() * B16 |
|
| + (i2.immediate() & 0xFFFF));
|
| }
|
|
|
| // RSL format: <insn> R1,R3,D2(B2)
|
| @@ -921,13 +933,13 @@ void Assembler::ris_form(Opcode op, Register r1, Condition m3, Register b4,
|
| Disp d4, const Operand& i2) {
|
| DCHECK(is_uint12(d4));
|
| DCHECK(is_uint16(op));
|
| - DCHECK(is_uint8(i2.imm_));
|
| + DCHECK(is_uint8(i2.immediate()));
|
| uint64_t code = (static_cast<uint64_t>(op & 0xFF00)) * B32 |
|
| (static_cast<uint64_t>(r1.code())) * B36 |
|
| (static_cast<uint64_t>(m3)) * B32 |
|
| (static_cast<uint64_t>(b4.code())) * B28 |
|
| (static_cast<uint64_t>(d4)) * B16 |
|
| - (static_cast<uint64_t>(i2.imm_)) << 8 |
|
| + (static_cast<uint64_t>(i2.immediate())) << 8 |
|
| (static_cast<uint64_t>(op & 0x00FF));
|
| emit6bytes(code);
|
| }
|
| @@ -962,7 +974,7 @@ void Assembler::s_form(Opcode op, Register b1, Disp d2) {
|
| }
|
|
|
| void Assembler::si_form(Opcode op, const Operand& i2, Register b1, Disp d1) {
|
| - emit4bytes((op & 0x00FF) << 24 | i2.imm_ * B16 | b1.code() * B12 | d1);
|
| + emit4bytes((op & 0x00FF) << 24 | i2.immediate() * B16 | b1.code() * B12 | d1);
|
| }
|
|
|
| // SIY format: <insn> D1(B1),I2
|
| @@ -981,9 +993,9 @@ void Assembler::si_form(Opcode op, const Operand& i2, Register b1, Disp d1) {
|
| void Assembler::siy_form(Opcode op, const Operand& i2, Register b1, Disp d1) {
|
| DCHECK(is_uint20(d1) || is_int20(d1));
|
| DCHECK(is_uint16(op));
|
| - DCHECK(is_uint8(i2.imm_));
|
| + DCHECK(is_uint8(i2.immediate()));
|
| uint64_t code = (static_cast<uint64_t>(op & 0xFF00)) * B32 |
|
| - (static_cast<uint64_t>(i2.imm_)) * B32 |
|
| + (static_cast<uint64_t>(i2.immediate())) * B32 |
|
| (static_cast<uint64_t>(b1.code())) * B28 |
|
| (static_cast<uint64_t>(d1 & 0x0FFF)) * B16 |
|
| (static_cast<uint64_t>(d1 & 0x0FF000)) >> 4 |
|
| @@ -1007,11 +1019,11 @@ void Assembler::siy_form(Opcode op, const Operand& i2, Register b1, Disp d1) {
|
| void Assembler::sil_form(Opcode op, Register b1, Disp d1, const Operand& i2) {
|
| DCHECK(is_uint12(d1));
|
| DCHECK(is_uint16(op));
|
| - DCHECK(is_uint16(i2.imm_));
|
| + DCHECK(is_uint16(i2.immediate()));
|
| uint64_t code = (static_cast<uint64_t>(op)) * B32 |
|
| (static_cast<uint64_t>(b1.code())) * B28 |
|
| (static_cast<uint64_t>(d1)) * B16 |
|
| - (static_cast<uint64_t>(i2.imm_));
|
| + (static_cast<uint64_t>(i2.immediate()));
|
| emit6bytes(code);
|
| }
|
|
|
| @@ -1125,10 +1137,10 @@ void Assembler::ss_form(Opcode op, Length l1, const Operand& i3, Register b1,
|
| DCHECK(is_uint12(d1));
|
| DCHECK(is_uint8(op));
|
| DCHECK(is_uint4(l1));
|
| - DCHECK(is_uint4(i3.imm_));
|
| + DCHECK(is_uint4(i3.immediate()));
|
| uint64_t code =
|
| (static_cast<uint64_t>(op)) * B40 | (static_cast<uint64_t>(l1)) * B36 |
|
| - (static_cast<uint64_t>(i3.imm_)) * B32 |
|
| + (static_cast<uint64_t>(i3.immediate())) * B32 |
|
| (static_cast<uint64_t>(b1.code())) * B28 |
|
| (static_cast<uint64_t>(d1)) * B16 |
|
| (static_cast<uint64_t>(b2.code())) * B12 | (static_cast<uint64_t>(d2));
|
| @@ -1426,7 +1438,7 @@ void Assembler::risbg(Register dst, Register src, const Operand& startBit,
|
| bool zeroBits) {
|
| // High tag the top bit of I4/EndBit to zero out any unselected bits
|
| if (zeroBits)
|
| - rie_f_form(RISBG, dst, src, startBit, Operand(endBit.imm_ | 0x80),
|
| + rie_f_form(RISBG, dst, src, startBit, Operand(endBit.immediate() | 0x80),
|
| shiftAmt);
|
| else
|
| rie_f_form(RISBG, dst, src, startBit, endBit, shiftAmt);
|
| @@ -1438,7 +1450,7 @@ void Assembler::risbgn(Register dst, Register src, const Operand& startBit,
|
| bool zeroBits) {
|
| // High tag the top bit of I4/EndBit to zero out any unselected bits
|
| if (zeroBits)
|
| - rie_f_form(RISBGN, dst, src, startBit, Operand(endBit.imm_ | 0x80),
|
| + rie_f_form(RISBGN, dst, src, startBit, Operand(endBit.immediate() | 0x80),
|
| shiftAmt);
|
| else
|
| rie_f_form(RISBGN, dst, src, startBit, endBit, shiftAmt);
|
| @@ -1472,9 +1484,10 @@ void Assembler::ark(Register r1, Register r2, Register r3) {
|
|
|
| // Add Storage-Imm (32)
|
| void Assembler::asi(const MemOperand& opnd, const Operand& imm) {
|
| - DCHECK(is_int8(imm.imm_));
|
| + DCHECK(is_int8(imm.immediate()));
|
| DCHECK(is_int20(opnd.offset()));
|
| - siy_form(ASI, Operand(0xff & imm.imm_), opnd.rb(), 0xfffff & opnd.offset());
|
| + siy_form(ASI, Operand(0xff & imm.immediate()), opnd.rb(),
|
| + 0xfffff & opnd.offset());
|
| }
|
|
|
| // -----------------------
|
| @@ -1495,9 +1508,10 @@ void Assembler::agrk(Register r1, Register r2, Register r3) {
|
|
|
| // Add Storage-Imm (64)
|
| void Assembler::agsi(const MemOperand& opnd, const Operand& imm) {
|
| - DCHECK(is_int8(imm.imm_));
|
| + DCHECK(is_int8(imm.immediate()));
|
| DCHECK(is_int20(opnd.offset()));
|
| - siy_form(AGSI, Operand(0xff & imm.imm_), opnd.rb(), 0xfffff & opnd.offset());
|
| + siy_form(AGSI, Operand(0xff & imm.immediate()), opnd.rb(),
|
| + 0xfffff & opnd.offset());
|
| }
|
|
|
| // -------------------------------
|
|
|