| Index: runtime/vm/intermediate_language_x64.cc
|
| ===================================================================
|
| --- runtime/vm/intermediate_language_x64.cc (revision 31338)
|
| +++ runtime/vm/intermediate_language_x64.cc (working copy)
|
| @@ -665,7 +665,7 @@
|
| Register char_code = locs()->in(0).reg();
|
| Register result = locs()->out().reg();
|
| __ LoadImmediate(result,
|
| - Immediate(reinterpret_cast<uword>(Symbols::PredefinedAddress())), PP);
|
| + Immediate(reinterpret_cast<uword>(Symbols::PredefinedAddress())), PP);
|
| __ movq(result, Address(result,
|
| char_code,
|
| TIMES_HALF_WORD_SIZE, // Char code is a smi.
|
| @@ -673,6 +673,31 @@
|
| }
|
|
|
|
|
| +LocationSummary* StringToCharCodeInstr::MakeLocationSummary(bool opt) const {
|
| + const intptr_t kNumInputs = 1;
|
| + return LocationSummary::Make(kNumInputs,
|
| + Location::RequiresRegister(),
|
| + LocationSummary::kNoCall);
|
| +}
|
| +
|
| +
|
| +void StringToCharCodeInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| + ASSERT(cid_ == kOneByteStringCid);
|
| + Register str = locs()->in(0).reg();
|
| + Register result = locs()->out().reg();
|
| + Label is_one, done;
|
| + __ movq(result, FieldAddress(str, String::length_offset()));
|
| + __ cmpq(result, Immediate(Smi::RawValue(1)));
|
| + __ j(EQUAL, &is_one, Assembler::kNearJump);
|
| + __ movq(result, Immediate(Smi::RawValue(-1)));
|
| + __ jmp(&done);
|
| + __ Bind(&is_one);
|
| + __ movzxb(result, FieldAddress(str, OneByteString::data_offset()));
|
| + __ SmiTag(result);
|
| + __ Bind(&done);
|
| +}
|
| +
|
| +
|
| LocationSummary* StringInterpolateInstr::MakeLocationSummary(bool opt) const {
|
| const intptr_t kNumInputs = 1;
|
| const intptr_t kNumTemps = 0;
|
|
|