Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(936)

Side by Side Diff: src/x64/macro-assembler-x64.cc

Issue 140553004: Introduce Assembler::RelocInfoNone static function for X64 (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/x64/macro-assembler-x64.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 } 156 }
157 // Size of movp(destination, src); 157 // Size of movp(destination, src);
158 return Assembler::kMoveAddressIntoScratchRegisterInstructionLength; 158 return Assembler::kMoveAddressIntoScratchRegisterInstructionLength;
159 } 159 }
160 160
161 161
162 void MacroAssembler::PushAddress(ExternalReference source) { 162 void MacroAssembler::PushAddress(ExternalReference source) {
163 int64_t address = reinterpret_cast<int64_t>(source.address()); 163 int64_t address = reinterpret_cast<int64_t>(source.address());
164 if (is_int32(address) && !Serializer::enabled()) { 164 if (is_int32(address) && !Serializer::enabled()) {
165 if (emit_debug_code()) { 165 if (emit_debug_code()) {
166 Move(kScratchRegister, kZapValue, RelocInfo::NONE64); 166 Move(kScratchRegister, kZapValue, Assembler::RelocInfoNone());
167 } 167 }
168 push(Immediate(static_cast<int32_t>(address))); 168 push(Immediate(static_cast<int32_t>(address)));
169 return; 169 return;
170 } 170 }
171 LoadAddress(kScratchRegister, source); 171 LoadAddress(kScratchRegister, source);
172 push(kScratchRegister); 172 push(kScratchRegister);
173 } 173 }
174 174
175 175
176 void MacroAssembler::LoadRoot(Register destination, Heap::RootListIndex index) { 176 void MacroAssembler::LoadRoot(Register destination, Heap::RootListIndex index) {
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 and_(scratch, object); 282 and_(scratch, object);
283 } 283 }
284 Move(kScratchRegister, ExternalReference::new_space_start(isolate())); 284 Move(kScratchRegister, ExternalReference::new_space_start(isolate()));
285 cmpq(scratch, kScratchRegister); 285 cmpq(scratch, kScratchRegister);
286 j(cc, branch, distance); 286 j(cc, branch, distance);
287 } else { 287 } else {
288 ASSERT(is_int32(static_cast<int64_t>(isolate()->heap()->NewSpaceMask()))); 288 ASSERT(is_int32(static_cast<int64_t>(isolate()->heap()->NewSpaceMask())));
289 intptr_t new_space_start = 289 intptr_t new_space_start =
290 reinterpret_cast<intptr_t>(isolate()->heap()->NewSpaceStart()); 290 reinterpret_cast<intptr_t>(isolate()->heap()->NewSpaceStart());
291 Move(kScratchRegister, reinterpret_cast<Address>(-new_space_start), 291 Move(kScratchRegister, reinterpret_cast<Address>(-new_space_start),
292 RelocInfo::NONE64); 292 Assembler::RelocInfoNone());
293 if (scratch.is(object)) { 293 if (scratch.is(object)) {
294 addq(scratch, kScratchRegister); 294 addq(scratch, kScratchRegister);
295 } else { 295 } else {
296 lea(scratch, Operand(object, kScratchRegister, times_1, 0)); 296 lea(scratch, Operand(object, kScratchRegister, times_1, 0));
297 } 297 }
298 and_(scratch, 298 and_(scratch,
299 Immediate(static_cast<int32_t>(isolate()->heap()->NewSpaceMask()))); 299 Immediate(static_cast<int32_t>(isolate()->heap()->NewSpaceMask())));
300 j(cc, branch, distance); 300 j(cc, branch, distance);
301 } 301 }
302 } 302 }
(...skipping 30 matching lines...) Expand all
333 } 333 }
334 334
335 RecordWrite( 335 RecordWrite(
336 object, dst, value, save_fp, remembered_set_action, OMIT_SMI_CHECK); 336 object, dst, value, save_fp, remembered_set_action, OMIT_SMI_CHECK);
337 337
338 bind(&done); 338 bind(&done);
339 339
340 // Clobber clobbered input registers when running with the debug-code flag 340 // Clobber clobbered input registers when running with the debug-code flag
341 // turned on to provoke errors. 341 // turned on to provoke errors.
342 if (emit_debug_code()) { 342 if (emit_debug_code()) {
343 Move(value, kZapValue, RelocInfo::NONE64); 343 Move(value, kZapValue, Assembler::RelocInfoNone());
344 Move(dst, kZapValue, RelocInfo::NONE64); 344 Move(dst, kZapValue, Assembler::RelocInfoNone());
345 } 345 }
346 } 346 }
347 347
348 348
349 void MacroAssembler::RecordWriteArray(Register object, 349 void MacroAssembler::RecordWriteArray(Register object,
350 Register value, 350 Register value,
351 Register index, 351 Register index,
352 SaveFPRegsMode save_fp, 352 SaveFPRegsMode save_fp,
353 RememberedSetAction remembered_set_action, 353 RememberedSetAction remembered_set_action,
354 SmiCheck smi_check) { 354 SmiCheck smi_check) {
(...skipping 12 matching lines...) Expand all
367 FixedArray::kHeaderSize - kHeapObjectTag)); 367 FixedArray::kHeaderSize - kHeapObjectTag));
368 368
369 RecordWrite( 369 RecordWrite(
370 object, dst, value, save_fp, remembered_set_action, OMIT_SMI_CHECK); 370 object, dst, value, save_fp, remembered_set_action, OMIT_SMI_CHECK);
371 371
372 bind(&done); 372 bind(&done);
373 373
374 // Clobber clobbered input registers when running with the debug-code flag 374 // Clobber clobbered input registers when running with the debug-code flag
375 // turned on to provoke errors. 375 // turned on to provoke errors.
376 if (emit_debug_code()) { 376 if (emit_debug_code()) {
377 Move(value, kZapValue, RelocInfo::NONE64); 377 Move(value, kZapValue, Assembler::RelocInfoNone());
378 Move(index, kZapValue, RelocInfo::NONE64); 378 Move(index, kZapValue, Assembler::RelocInfoNone());
379 } 379 }
380 } 380 }
381 381
382 382
383 void MacroAssembler::RecordWrite(Register object, 383 void MacroAssembler::RecordWrite(Register object,
384 Register address, 384 Register address,
385 Register value, 385 Register value,
386 SaveFPRegsMode fp_mode, 386 SaveFPRegsMode fp_mode,
387 RememberedSetAction remembered_set_action, 387 RememberedSetAction remembered_set_action,
388 SmiCheck smi_check) { 388 SmiCheck smi_check) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 Label::kNear); 432 Label::kNear);
433 433
434 RecordWriteStub stub(object, value, address, remembered_set_action, fp_mode); 434 RecordWriteStub stub(object, value, address, remembered_set_action, fp_mode);
435 CallStub(&stub); 435 CallStub(&stub);
436 436
437 bind(&done); 437 bind(&done);
438 438
439 // Clobber clobbered registers when running with the debug-code flag 439 // Clobber clobbered registers when running with the debug-code flag
440 // turned on to provoke errors. 440 // turned on to provoke errors.
441 if (emit_debug_code()) { 441 if (emit_debug_code()) {
442 Move(address, kZapValue, RelocInfo::NONE64); 442 Move(address, kZapValue, Assembler::RelocInfoNone());
443 Move(value, kZapValue, RelocInfo::NONE64); 443 Move(value, kZapValue, Assembler::RelocInfoNone());
444 } 444 }
445 } 445 }
446 446
447 447
448 void MacroAssembler::Assert(Condition cc, BailoutReason reason) { 448 void MacroAssembler::Assert(Condition cc, BailoutReason reason) {
449 if (emit_debug_code()) Check(cc, reason); 449 if (emit_debug_code()) Check(cc, reason);
450 } 450 }
451 451
452 452
453 void MacroAssembler::AssertFastElements(Register elements) { 453 void MacroAssembler::AssertFastElements(Register elements) {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 RecordComment(msg); 521 RecordComment(msg);
522 } 522 }
523 523
524 if (FLAG_trap_on_abort) { 524 if (FLAG_trap_on_abort) {
525 int3(); 525 int3();
526 return; 526 return;
527 } 527 }
528 #endif 528 #endif
529 529
530 push(rax); 530 push(rax);
531 Move(kScratchRegister, reinterpret_cast<Smi*>(p0), RelocInfo::NONE64); 531 Move(kScratchRegister, reinterpret_cast<Smi*>(p0),
532 Assembler::RelocInfoNone());
532 push(kScratchRegister); 533 push(kScratchRegister);
533 Move(kScratchRegister, Smi::FromInt(static_cast<int>(p1 - p0)), 534 Move(kScratchRegister, Smi::FromInt(static_cast<int>(p1 - p0)),
534 RelocInfo::NONE64); 535 Assembler::RelocInfoNone());
535 push(kScratchRegister); 536 push(kScratchRegister);
536 537
537 if (!has_frame_) { 538 if (!has_frame_) {
538 // We don't actually want to generate a pile of code for this, so just 539 // We don't actually want to generate a pile of code for this, so just
539 // claim there is a stack frame, without generating one. 540 // claim there is a stack frame, without generating one.
540 FrameScope scope(this, StackFrame::NONE); 541 FrameScope scope(this, StackFrame::NONE);
541 CallRuntime(Runtime::kAbort, 2); 542 CallRuntime(Runtime::kAbort, 2);
542 } else { 543 } else {
543 CallRuntime(Runtime::kAbort, 2); 544 CallRuntime(Runtime::kAbort, 2);
544 } 545 }
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 if (value == 1) { 1037 if (value == 1) {
1037 return kSmiConstantRegister; 1038 return kSmiConstantRegister;
1038 } 1039 }
1039 LoadSmiConstant(kScratchRegister, source); 1040 LoadSmiConstant(kScratchRegister, source);
1040 return kScratchRegister; 1041 return kScratchRegister;
1041 } 1042 }
1042 1043
1043 1044
1044 void MacroAssembler::LoadSmiConstant(Register dst, Smi* source) { 1045 void MacroAssembler::LoadSmiConstant(Register dst, Smi* source) {
1045 if (emit_debug_code()) { 1046 if (emit_debug_code()) {
1046 Move(dst, Smi::FromInt(kSmiConstantRegisterValue), RelocInfo::NONE64); 1047 Move(dst, Smi::FromInt(kSmiConstantRegisterValue),
1048 Assembler::RelocInfoNone());
1047 cmpq(dst, kSmiConstantRegister); 1049 cmpq(dst, kSmiConstantRegister);
1048 Assert(equal, kUninitializedKSmiConstantRegister); 1050 Assert(equal, kUninitializedKSmiConstantRegister);
1049 } 1051 }
1050 int value = source->value(); 1052 int value = source->value();
1051 if (value == 0) { 1053 if (value == 0) {
1052 xorl(dst, dst); 1054 xorl(dst, dst);
1053 return; 1055 return;
1054 } 1056 }
1055 bool negative = value < 0; 1057 bool negative = value < 0;
1056 unsigned int uvalue = negative ? -value : value; 1058 unsigned int uvalue = negative ? -value : value;
(...skipping 19 matching lines...) Expand all
1076 case 2: 1078 case 2:
1077 lea(dst, Operand(kSmiConstantRegister, kSmiConstantRegister, times_1, 0)); 1079 lea(dst, Operand(kSmiConstantRegister, kSmiConstantRegister, times_1, 0));
1078 break; 1080 break;
1079 case 1: 1081 case 1:
1080 movp(dst, kSmiConstantRegister); 1082 movp(dst, kSmiConstantRegister);
1081 break; 1083 break;
1082 case 0: 1084 case 0:
1083 UNREACHABLE(); 1085 UNREACHABLE();
1084 return; 1086 return;
1085 default: 1087 default:
1086 Move(dst, source, RelocInfo::NONE64); 1088 Move(dst, source, Assembler::RelocInfoNone());
1087 return; 1089 return;
1088 } 1090 }
1089 if (negative) { 1091 if (negative) {
1090 neg(dst); 1092 neg(dst);
1091 } 1093 }
1092 } 1094 }
1093 1095
1094 1096
1095 void MacroAssembler::Integer32ToSmi(Register dst, Register src) { 1097 void MacroAssembler::Integer32ToSmi(Register dst, Register src) {
1096 STATIC_ASSERT(kSmiTag == 0); 1098 STATIC_ASSERT(kSmiTag == 0);
(...skipping 1519 matching lines...) Expand 10 before | Expand all | Expand 10 after
2616 LoadAddress(kScratchRegister, ext); 2618 LoadAddress(kScratchRegister, ext);
2617 call(kScratchRegister); 2619 call(kScratchRegister);
2618 #ifdef DEBUG 2620 #ifdef DEBUG
2619 CHECK_EQ(end_position, pc_offset()); 2621 CHECK_EQ(end_position, pc_offset());
2620 #endif 2622 #endif
2621 } 2623 }
2622 2624
2623 2625
2624 void MacroAssembler::Call(Address destination, RelocInfo::Mode rmode) { 2626 void MacroAssembler::Call(Address destination, RelocInfo::Mode rmode) {
2625 #ifdef DEBUG 2627 #ifdef DEBUG
2626 int end_position = pc_offset() + CallSize(destination, rmode); 2628 int end_position = pc_offset() + CallSize(destination);
2627 #endif 2629 #endif
2628 Move(kScratchRegister, destination, rmode); 2630 Move(kScratchRegister, destination, rmode);
2629 call(kScratchRegister); 2631 call(kScratchRegister);
2630 #ifdef DEBUG 2632 #ifdef DEBUG
2631 CHECK_EQ(pc_offset(), end_position); 2633 CHECK_EQ(pc_offset(), end_position);
2632 #endif 2634 #endif
2633 } 2635 }
2634 2636
2635 2637
2636 void MacroAssembler::Call(Handle<Code> code_object, 2638 void MacroAssembler::Call(Handle<Code> code_object,
(...skipping 2347 matching lines...) Expand 10 before | Expand all | Expand 10 after
4984 j(equal, found); 4986 j(equal, found);
4985 movp(current, FieldOperand(current, Map::kPrototypeOffset)); 4987 movp(current, FieldOperand(current, Map::kPrototypeOffset));
4986 CompareRoot(current, Heap::kNullValueRootIndex); 4988 CompareRoot(current, Heap::kNullValueRootIndex);
4987 j(not_equal, &loop_again); 4989 j(not_equal, &loop_again);
4988 } 4990 }
4989 4991
4990 4992
4991 } } // namespace v8::internal 4993 } } // namespace v8::internal
4992 4994
4993 #endif // V8_TARGET_ARCH_X64 4995 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/x64/macro-assembler-x64.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698