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

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

Issue 2762973004: [macro-assembler] Remove a bunch of unused functions. (Closed)
Patch Set: More. Created 3 years, 9 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
« no previous file with comments | « src/s390/macro-assembler-s390.cc ('k') | src/x64/macro-assembler-x64.cc » ('j') | 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 // 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 #ifndef V8_X64_MACRO_ASSEMBLER_X64_H_ 5 #ifndef V8_X64_MACRO_ASSEMBLER_X64_H_
6 #define V8_X64_MACRO_ASSEMBLER_X64_H_ 6 #define V8_X64_MACRO_ASSEMBLER_X64_H_
7 7
8 #include "src/bailout-reason.h" 8 #include "src/bailout-reason.h"
9 #include "src/base/flags.h" 9 #include "src/base/flags.h"
10 #include "src/frames.h" 10 #include "src/frames.h"
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 RecordWriteField(context, 278 RecordWriteField(context,
279 offset + kHeapObjectTag, 279 offset + kHeapObjectTag,
280 value, 280 value,
281 scratch, 281 scratch,
282 save_fp, 282 save_fp,
283 remembered_set_action, 283 remembered_set_action,
284 smi_check, 284 smi_check,
285 pointers_to_here_check_for_value); 285 pointers_to_here_check_for_value);
286 } 286 }
287 287
288 // Notify the garbage collector that we wrote a pointer into a fixed array.
289 // |array| is the array being stored into, |value| is the
290 // object being stored. |index| is the array index represented as a non-smi.
291 // All registers are clobbered by the operation RecordWriteArray
292 // filters out smis so it does not update the write barrier if the
293 // value is a smi.
294 void RecordWriteArray(
295 Register array,
296 Register value,
297 Register index,
298 SaveFPRegsMode save_fp,
299 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET,
300 SmiCheck smi_check = INLINE_SMI_CHECK,
301 PointersToHereCheck pointers_to_here_check_for_value =
302 kPointersToHereMaybeInteresting);
303
304 // Notify the garbage collector that we wrote a code entry into a 288 // Notify the garbage collector that we wrote a code entry into a
305 // JSFunction. Only scratch is clobbered by the operation. 289 // JSFunction. Only scratch is clobbered by the operation.
306 void RecordWriteCodeEntryField(Register js_function, Register code_entry, 290 void RecordWriteCodeEntryField(Register js_function, Register code_entry,
307 Register scratch); 291 Register scratch);
308 292
309 void RecordWriteForMap( 293 void RecordWriteForMap(
310 Register object, 294 Register object,
311 Register map, 295 Register map,
312 Register dst, 296 Register dst,
313 SaveFPRegsMode save_fp); 297 SaveFPRegsMode save_fp);
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 SmiToInteger32(kScratchRegister, src); 438 SmiToInteger32(kScratchRegister, src);
455 Cvtlsi2sd(dst, kScratchRegister); 439 Cvtlsi2sd(dst, kScratchRegister);
456 } 440 }
457 441
458 // Multiply a positive smi's integer value by a power of two. 442 // Multiply a positive smi's integer value by a power of two.
459 // Provides result as 64-bit integer value. 443 // Provides result as 64-bit integer value.
460 void PositiveSmiTimesPowerOfTwoToInteger64(Register dst, 444 void PositiveSmiTimesPowerOfTwoToInteger64(Register dst,
461 Register src, 445 Register src,
462 int power); 446 int power);
463 447
464 // Divide a positive smi's integer value by a power of two.
465 // Provides result as 32-bit integer value.
466 void PositiveSmiDivPowerOfTwoToInteger32(Register dst,
467 Register src,
468 int power);
469
470 // Perform the logical or of two smi values and return a smi value.
471 // If either argument is not a smi, jump to on_not_smis and retain
472 // the original values of source registers. The destination register
473 // may be changed if it's not one of the source registers.
474 void SmiOrIfSmis(Register dst,
475 Register src1,
476 Register src2,
477 Label* on_not_smis,
478 Label::Distance near_jump = Label::kFar);
479
480
481 // Simple comparison of smis. Both sides must be known smis to use these, 448 // Simple comparison of smis. Both sides must be known smis to use these,
482 // otherwise use Cmp. 449 // otherwise use Cmp.
483 void SmiCompare(Register smi1, Register smi2); 450 void SmiCompare(Register smi1, Register smi2);
484 void SmiCompare(Register dst, Smi* src); 451 void SmiCompare(Register dst, Smi* src);
485 void SmiCompare(Register dst, const Operand& src); 452 void SmiCompare(Register dst, const Operand& src);
486 void SmiCompare(const Operand& dst, Register src); 453 void SmiCompare(const Operand& dst, Register src);
487 void SmiCompare(const Operand& dst, Smi* src); 454 void SmiCompare(const Operand& dst, Smi* src);
488 // Compare the int32 in src register to the value of the smi stored at dst. 455 // Compare the int32 in src register to the value of the smi stored at dst.
489 void SmiCompareInteger32(const Operand& dst, Register src);
490 // Sets sign and zero flags depending on value of smi in register.
491 void SmiTest(Register src); 456 void SmiTest(Register src);
492 457
493 // Functions performing a check on a known or potential smi. Returns 458 // Functions performing a check on a known or potential smi. Returns
494 // a condition that is satisfied if the check is successful. 459 // a condition that is satisfied if the check is successful.
495 460
496 // Is the value a tagged smi. 461 // Is the value a tagged smi.
497 Condition CheckSmi(Register src); 462 Condition CheckSmi(Register src);
498 Condition CheckSmi(const Operand& src); 463 Condition CheckSmi(const Operand& src);
499 464
500 // Is the value a non-negative tagged smi. 465 // Is the value a non-negative tagged smi.
(...skipping 11 matching lines...) Expand all
512 Register scratch = kScratchRegister); 477 Register scratch = kScratchRegister);
513 478
514 // Checks whether an 32-bit integer value is a valid for conversion 479 // Checks whether an 32-bit integer value is a valid for conversion
515 // to a smi. 480 // to a smi.
516 Condition CheckInteger32ValidSmiValue(Register src); 481 Condition CheckInteger32ValidSmiValue(Register src);
517 482
518 // Checks whether an 32-bit unsigned integer value is a valid for 483 // Checks whether an 32-bit unsigned integer value is a valid for
519 // conversion to a smi. 484 // conversion to a smi.
520 Condition CheckUInteger32ValidSmiValue(Register src); 485 Condition CheckUInteger32ValidSmiValue(Register src);
521 486
522 // Check whether src is a Smi, and set dst to zero if it is a smi,
523 // and to one if it isn't.
524 void CheckSmiToIndicator(Register dst, Register src);
525 void CheckSmiToIndicator(Register dst, const Operand& src);
526
527 // Test-and-jump functions. Typically combines a check function 487 // Test-and-jump functions. Typically combines a check function
528 // above with a conditional jump. 488 // above with a conditional jump.
529 489
530 // Jump if the value can be represented by a smi. 490 // Jump if the value can be represented by a smi.
531 void JumpIfValidSmiValue(Register src, Label* on_valid, 491 void JumpIfValidSmiValue(Register src, Label* on_valid,
532 Label::Distance near_jump = Label::kFar); 492 Label::Distance near_jump = Label::kFar);
533 493
534 // Jump if the value cannot be represented by a smi. 494 // Jump if the value cannot be represented by a smi.
535 void JumpIfNotValidSmiValue(Register src, Label* on_invalid, 495 void JumpIfNotValidSmiValue(Register src, Label* on_invalid,
536 Label::Distance near_jump = Label::kFar); 496 Label::Distance near_jump = Label::kFar);
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
787 Register object_map, 747 Register object_map,
788 Label* not_string, 748 Label* not_string,
789 Label::Distance near_jump = Label::kFar); 749 Label::Distance near_jump = Label::kFar);
790 750
791 751
792 void JumpIfNotBothSequentialOneByteStrings( 752 void JumpIfNotBothSequentialOneByteStrings(
793 Register first_object, Register second_object, Register scratch1, 753 Register first_object, Register second_object, Register scratch1,
794 Register scratch2, Label* on_not_both_flat_one_byte, 754 Register scratch2, Label* on_not_both_flat_one_byte,
795 Label::Distance near_jump = Label::kFar); 755 Label::Distance near_jump = Label::kFar);
796 756
797 // Check whether the instance type represents a flat one-byte string. Jump
798 // to the label if not. If the instance type can be scratched specify same
799 // register for both instance type and scratch.
800 void JumpIfInstanceTypeIsNotSequentialOneByte(
801 Register instance_type, Register scratch,
802 Label* on_not_flat_one_byte_string,
803 Label::Distance near_jump = Label::kFar);
804
805 void JumpIfBothInstanceTypesAreNotSequentialOneByte( 757 void JumpIfBothInstanceTypesAreNotSequentialOneByte(
806 Register first_object_instance_type, Register second_object_instance_type, 758 Register first_object_instance_type, Register second_object_instance_type,
807 Register scratch1, Register scratch2, Label* on_fail, 759 Register scratch1, Register scratch2, Label* on_fail,
808 Label::Distance near_jump = Label::kFar); 760 Label::Distance near_jump = Label::kFar);
809 761
810 void EmitSeqStringSetCharCheck(Register string, 762 void EmitSeqStringSetCharCheck(Register string,
811 Register index, 763 Register index,
812 Register value, 764 Register value,
813 uint32_t encoding_mask); 765 uint32_t encoding_mask);
814 766
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
858 void Cvttsd2si(Register dst, XMMRegister src); 810 void Cvttsd2si(Register dst, XMMRegister src);
859 void Cvttsd2si(Register dst, const Operand& src); 811 void Cvttsd2si(Register dst, const Operand& src);
860 void Cvttss2siq(Register dst, XMMRegister src); 812 void Cvttss2siq(Register dst, XMMRegister src);
861 void Cvttss2siq(Register dst, const Operand& src); 813 void Cvttss2siq(Register dst, const Operand& src);
862 void Cvttsd2siq(Register dst, XMMRegister src); 814 void Cvttsd2siq(Register dst, XMMRegister src);
863 void Cvttsd2siq(Register dst, const Operand& src); 815 void Cvttsd2siq(Register dst, const Operand& src);
864 816
865 // Move if the registers are not identical. 817 // Move if the registers are not identical.
866 void Move(Register target, Register source); 818 void Move(Register target, Register source);
867 819
868 // TestBit and Load SharedFunctionInfo special field.
869 void TestBitSharedFunctionInfoSpecialField(Register base,
870 int offset,
871 int bit_index);
872 void LoadSharedFunctionInfoSpecialField(Register dst, 820 void LoadSharedFunctionInfoSpecialField(Register dst,
873 Register base, 821 Register base,
874 int offset); 822 int offset);
875 823
876 // Handle support 824 // Handle support
877 void Move(Register dst, Handle<Object> source); 825 void Move(Register dst, Handle<Object> source);
878 void Move(const Operand& dst, Handle<Object> source); 826 void Move(const Operand& dst, Handle<Object> source);
879 void Cmp(Register dst, Handle<Object> source); 827 void Cmp(Register dst, Handle<Object> source);
880 void Cmp(const Operand& dst, Handle<Object> source); 828 void Cmp(const Operand& dst, Handle<Object> source);
881 void Cmp(Register dst, Smi* src); 829 void Cmp(Register dst, Smi* src);
882 void Cmp(const Operand& dst, Smi* src); 830 void Cmp(const Operand& dst, Smi* src);
883 void Push(Handle<Object> source); 831 void Push(Handle<Object> source);
884 832
885 // Load a heap object and handle the case of new-space objects by 833 // Load a heap object and handle the case of new-space objects by
886 // indirecting via a global cell. 834 // indirecting via a global cell.
887 void MoveHeapObject(Register result, Handle<Object> object); 835 void MoveHeapObject(Register result, Handle<Object> object);
888 836
889 // Load a global cell into a register.
890 void LoadGlobalCell(Register dst, Handle<Cell> cell);
891
892 // Compare the given value and the value of weak cell.
893 void CmpWeakValue(Register value, Handle<WeakCell> cell, Register scratch);
894
895 void GetWeakValue(Register value, Handle<WeakCell> cell); 837 void GetWeakValue(Register value, Handle<WeakCell> cell);
896 838
897 // Load the value of the weak cell in the value register. Branch to the given 839 // Load the value of the weak cell in the value register. Branch to the given
898 // miss label if the weak cell was cleared. 840 // miss label if the weak cell was cleared.
899 void LoadWeakValue(Register value, Handle<WeakCell> cell, Label* miss); 841 void LoadWeakValue(Register value, Handle<WeakCell> cell, Label* miss);
900 842
901 // Emit code that loads |parameter_index|'th parameter from the stack to 843 // Emit code that loads |parameter_index|'th parameter from the stack to
902 // the register according to the CallInterfaceDescriptor definition. 844 // the register according to the CallInterfaceDescriptor definition.
903 // |sp_to_caller_sp_offset_in_words| specifies the number of words pushed 845 // |sp_to_caller_sp_offset_in_words| specifies the number of words pushed
904 // below the caller's sp (on x64 it's at least return address). 846 // below the caller's sp (on x64 it's at least return address).
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
1098 1040
1099 void Popcntq(Register dst, Register src); 1041 void Popcntq(Register dst, Register src);
1100 void Popcntq(Register dst, const Operand& src); 1042 void Popcntq(Register dst, const Operand& src);
1101 1043
1102 // Non-x64 instructions. 1044 // Non-x64 instructions.
1103 // Push/pop all general purpose registers. 1045 // Push/pop all general purpose registers.
1104 // Does not push rsp/rbp nor any of the assembler's special purpose registers 1046 // Does not push rsp/rbp nor any of the assembler's special purpose registers
1105 // (kScratchRegister, kRootRegister). 1047 // (kScratchRegister, kRootRegister).
1106 void Pushad(); 1048 void Pushad();
1107 void Popad(); 1049 void Popad();
1108 // Sets the stack as after performing Popad, without actually loading the
1109 // registers.
1110 void Dropad();
1111 1050
1112 // Compare object type for heap object. 1051 // Compare object type for heap object.
1113 // Always use unsigned comparisons: above and below, not less and greater. 1052 // Always use unsigned comparisons: above and below, not less and greater.
1114 // Incoming register is heap_object and outgoing register is map. 1053 // Incoming register is heap_object and outgoing register is map.
1115 // They may be the same register, and may be kScratchRegister. 1054 // They may be the same register, and may be kScratchRegister.
1116 void CmpObjectType(Register heap_object, InstanceType type, Register map); 1055 void CmpObjectType(Register heap_object, InstanceType type, Register map);
1117 1056
1118 // Compare instance type for map. 1057 // Compare instance type for map.
1119 // Always use unsigned comparisons: above and below, not less and greater. 1058 // Always use unsigned comparisons: above and below, not less and greater.
1120 void CmpInstanceType(Register map, InstanceType type); 1059 void CmpInstanceType(Register map, InstanceType type);
1121 1060
1122 // Compare an object's map with the specified map. 1061 // Compare an object's map with the specified map.
1123 void CompareMap(Register obj, Handle<Map> map); 1062 void CompareMap(Register obj, Handle<Map> map);
1124 1063
1125 // Check if the map of an object is equal to a specified map and branch to 1064 // Check if the map of an object is equal to a specified map and branch to
1126 // label if not. Skip the smi check if not required (object is known to be a 1065 // label if not. Skip the smi check if not required (object is known to be a
1127 // heap object). If mode is ALLOW_ELEMENT_TRANSITION_MAPS, then also match 1066 // heap object). If mode is ALLOW_ELEMENT_TRANSITION_MAPS, then also match
1128 // against maps that are ElementsKind transition maps of the specified map. 1067 // against maps that are ElementsKind transition maps of the specified map.
1129 void CheckMap(Register obj, 1068 void CheckMap(Register obj,
1130 Handle<Map> map, 1069 Handle<Map> map,
1131 Label* fail, 1070 Label* fail,
1132 SmiCheckType smi_check_type); 1071 SmiCheckType smi_check_type);
1133 1072
1134 // Check if the map of an object is equal to a specified weak map and branch
1135 // to a specified target if equal. Skip the smi check if not required
1136 // (object is known to be a heap object)
1137 void DispatchWeakMap(Register obj, Register scratch1, Register scratch2,
1138 Handle<WeakCell> cell, Handle<Code> success,
1139 SmiCheckType smi_check_type);
1140
1141 // Check if the object in register heap_object is a string. Afterwards the 1073 // Check if the object in register heap_object is a string. Afterwards the
1142 // register map contains the object map and the register instance_type 1074 // register map contains the object map and the register instance_type
1143 // contains the instance_type. The registers map and instance_type can be the 1075 // contains the instance_type. The registers map and instance_type can be the
1144 // same in which case it contains the instance type afterwards. Either of the 1076 // same in which case it contains the instance type afterwards. Either of the
1145 // registers map and instance_type can be the same as heap_object. 1077 // registers map and instance_type can be the same as heap_object.
1146 Condition IsObjectStringType(Register heap_object, 1078 Condition IsObjectStringType(Register heap_object,
1147 Register map, 1079 Register map,
1148 Register instance_type); 1080 Register instance_type);
1149 1081
1150 // Check if the object in register heap_object is a name. Afterwards the
1151 // register map contains the object map and the register instance_type
1152 // contains the instance_type. The registers map and instance_type can be the
1153 // same in which case it contains the instance type afterwards. Either of the
1154 // registers map and instance_type can be the same as heap_object.
1155 Condition IsObjectNameType(Register heap_object,
1156 Register map,
1157 Register instance_type);
1158
1159 // FCmp compares and pops the two values on top of the FPU stack. 1082 // FCmp compares and pops the two values on top of the FPU stack.
1160 // The flag results are similar to integer cmp, but requires unsigned 1083 // The flag results are similar to integer cmp, but requires unsigned
1161 // jcc instructions (je, ja, jae, jb, jbe, je, and jz). 1084 // jcc instructions (je, ja, jae, jb, jbe, je, and jz).
1162 void FCmp(); 1085 void FCmp();
1163 1086
1164 void ClampUint8(Register reg); 1087 void ClampUint8(Register reg);
1165 1088
1166 void ClampDoubleToUint8(XMMRegister input_reg, 1089 void ClampDoubleToUint8(XMMRegister input_reg,
1167 XMMRegister temp_xmm_reg, 1090 XMMRegister temp_xmm_reg,
1168 Register result_reg); 1091 Register result_reg);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1209 DCHECK((mask & 0x80000000u) == 0); 1132 DCHECK((mask & 0x80000000u) == 0);
1210 if (shift < kSmiShift) { 1133 if (shift < kSmiShift) {
1211 shlp(reg, Immediate(kSmiShift - shift)); 1134 shlp(reg, Immediate(kSmiShift - shift));
1212 } else if (shift > kSmiShift) { 1135 } else if (shift > kSmiShift) {
1213 sarp(reg, Immediate(shift - kSmiShift)); 1136 sarp(reg, Immediate(shift - kSmiShift));
1214 } 1137 }
1215 andp(reg, Immediate(mask)); 1138 andp(reg, Immediate(mask));
1216 } 1139 }
1217 } 1140 }
1218 1141
1219 // Abort execution if argument is not a number, enabled via --debug-code.
1220 void AssertNumber(Register object);
1221 void AssertNotNumber(Register object);
1222
1223 // Abort execution if argument is a smi, enabled via --debug-code. 1142 // Abort execution if argument is a smi, enabled via --debug-code.
1224 void AssertNotSmi(Register object); 1143 void AssertNotSmi(Register object);
1225 1144
1226 // Abort execution if argument is not a smi, enabled via --debug-code. 1145 // Abort execution if argument is not a smi, enabled via --debug-code.
1227 void AssertSmi(Register object); 1146 void AssertSmi(Register object);
1228 void AssertSmi(const Operand& object); 1147 void AssertSmi(const Operand& object);
1229 1148
1230 // Abort execution if a 64 bit register containing a 32 bit payload does not 1149 // Abort execution if a 64 bit register containing a 32 bit payload does not
1231 // have zeros in the top 32 bits, enabled via --debug-code. 1150 // have zeros in the top 32 bits, enabled via --debug-code.
1232 void AssertZeroExtended(Register reg); 1151 void AssertZeroExtended(Register reg);
1233 1152
1234 // Abort execution if argument is not a string, enabled via --debug-code.
1235 void AssertString(Register object);
1236
1237 // Abort execution if argument is not a name, enabled via --debug-code.
1238 void AssertName(Register object);
1239
1240 // Abort execution if argument is not a JSFunction, enabled via --debug-code. 1153 // Abort execution if argument is not a JSFunction, enabled via --debug-code.
1241 void AssertFunction(Register object); 1154 void AssertFunction(Register object);
1242 1155
1243 // Abort execution if argument is not a JSBoundFunction, 1156 // Abort execution if argument is not a JSBoundFunction,
1244 // enabled via --debug-code. 1157 // enabled via --debug-code.
1245 void AssertBoundFunction(Register object); 1158 void AssertBoundFunction(Register object);
1246 1159
1247 // Abort execution if argument is not a JSGeneratorObject, 1160 // Abort execution if argument is not a JSGeneratorObject,
1248 // enabled via --debug-code. 1161 // enabled via --debug-code.
1249 void AssertGeneratorObject(Register object); 1162 void AssertGeneratorObject(Register object);
1250 1163
1251 // Abort execution if argument is not a JSReceiver, enabled via --debug-code.
1252 void AssertReceiver(Register object);
1253
1254 // Abort execution if argument is not undefined or an AllocationSite, enabled 1164 // Abort execution if argument is not undefined or an AllocationSite, enabled
1255 // via --debug-code. 1165 // via --debug-code.
1256 void AssertUndefinedOrAllocationSite(Register object); 1166 void AssertUndefinedOrAllocationSite(Register object);
1257 1167
1258 // Abort execution if argument is not the root value with the given index,
1259 // enabled via --debug-code.
1260 void AssertRootValue(Register src,
1261 Heap::RootListIndex root_value_index,
1262 BailoutReason reason);
1263
1264 // --------------------------------------------------------------------------- 1168 // ---------------------------------------------------------------------------
1265 // Exception handling 1169 // Exception handling
1266 1170
1267 // Push a new stack handler and link it into stack handler chain. 1171 // Push a new stack handler and link it into stack handler chain.
1268 void PushStackHandler(); 1172 void PushStackHandler();
1269 1173
1270 // Unlink the stack handler on top of the stack from the stack handler chain. 1174 // Unlink the stack handler on top of the stack from the stack handler chain.
1271 void PopStackHandler(); 1175 void PopStackHandler();
1272 1176
1273 // --------------------------------------------------------------------------- 1177 // ---------------------------------------------------------------------------
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1329 MutableMode mode = IMMUTABLE); 1233 MutableMode mode = IMMUTABLE);
1330 1234
1331 // Allocate and initialize a JSValue wrapper with the specified {constructor} 1235 // Allocate and initialize a JSValue wrapper with the specified {constructor}
1332 // and {value}. 1236 // and {value}.
1333 void AllocateJSValue(Register result, Register constructor, Register value, 1237 void AllocateJSValue(Register result, Register constructor, Register value,
1334 Register scratch, Label* gc_required); 1238 Register scratch, Label* gc_required);
1335 1239
1336 // --------------------------------------------------------------------------- 1240 // ---------------------------------------------------------------------------
1337 // Support functions. 1241 // Support functions.
1338 1242
1339 // Check if result is zero and op is negative.
1340 void NegativeZeroTest(Register result, Register op, Label* then_label);
1341
1342 // Check if result is zero and op is negative in code using jump targets.
1343 void NegativeZeroTest(CodeGenerator* cgen,
1344 Register result,
1345 Register op,
1346 JumpTarget* then_target);
1347
1348 // Check if result is zero and any of op1 and op2 are negative.
1349 // Register scratch is destroyed, and it must be different from op2.
1350 void NegativeZeroTest(Register result, Register op1, Register op2,
1351 Register scratch, Label* then_label);
1352
1353 // Find the function context up the context chain. 1243 // Find the function context up the context chain.
1354 void LoadContext(Register dst, int context_chain_length); 1244 void LoadContext(Register dst, int context_chain_length);
1355 1245
1356 // Load the global object from the current context. 1246 // Load the global object from the current context.
1357 void LoadGlobalObject(Register dst) { 1247 void LoadGlobalObject(Register dst) {
1358 LoadNativeContextSlot(Context::EXTENSION_INDEX, dst); 1248 LoadNativeContextSlot(Context::EXTENSION_INDEX, dst);
1359 } 1249 }
1360 1250
1361 // Load the global proxy from the current context. 1251 // Load the global proxy from the current context.
1362 void LoadGlobalProxy(Register dst) { 1252 void LoadGlobalProxy(Register dst) {
1363 LoadNativeContextSlot(Context::GLOBAL_PROXY_INDEX, dst); 1253 LoadNativeContextSlot(Context::GLOBAL_PROXY_INDEX, dst);
1364 } 1254 }
1365 1255
1366 // Load the native context slot with the current index. 1256 // Load the native context slot with the current index.
1367 void LoadNativeContextSlot(int index, Register dst); 1257 void LoadNativeContextSlot(int index, Register dst);
1368 1258
1369 // Load the initial map from the global function. The registers 1259 // Load the initial map from the global function. The registers
1370 // function and map can be the same. 1260 // function and map can be the same.
1371 void LoadGlobalFunctionInitialMap(Register function, Register map); 1261 void LoadGlobalFunctionInitialMap(Register function, Register map);
1372 1262
1373 // --------------------------------------------------------------------------- 1263 // ---------------------------------------------------------------------------
1374 // Runtime calls 1264 // Runtime calls
1375 1265
1376 // Call a code stub. 1266 // Call a code stub.
1377 void CallStub(CodeStub* stub, TypeFeedbackId ast_id = TypeFeedbackId::None()); 1267 void CallStub(CodeStub* stub, TypeFeedbackId ast_id = TypeFeedbackId::None());
1378 1268
1379 // Tail call a code stub (jump). 1269 // Tail call a code stub (jump).
1380 void TailCallStub(CodeStub* stub); 1270 void TailCallStub(CodeStub* stub);
1381 1271
1382 // Return from a code stub after popping its arguments.
1383 void StubReturn(int argc);
1384
1385 // Call a runtime routine. 1272 // Call a runtime routine.
1386 void CallRuntime(const Runtime::Function* f, 1273 void CallRuntime(const Runtime::Function* f,
1387 int num_arguments, 1274 int num_arguments,
1388 SaveFPRegsMode save_doubles = kDontSaveFPRegs); 1275 SaveFPRegsMode save_doubles = kDontSaveFPRegs);
1389 1276
1390 // Call a runtime function and save the value of XMM registers. 1277 // Call a runtime function and save the value of XMM registers.
1391 void CallRuntimeSaveDoubles(Runtime::FunctionId fid) { 1278 void CallRuntimeSaveDoubles(Runtime::FunctionId fid) {
1392 const Runtime::Function* function = Runtime::FunctionForId(fid); 1279 const Runtime::Function* function = Runtime::FunctionForId(fid);
1393 CallRuntime(function, function->nargs, kSaveFPRegs); 1280 CallRuntime(function, function->nargs, kSaveFPRegs);
1394 } 1281 }
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1471 void DecrementCounter(StatsCounter* counter, int value); 1358 void DecrementCounter(StatsCounter* counter, int value);
1472 1359
1473 1360
1474 // --------------------------------------------------------------------------- 1361 // ---------------------------------------------------------------------------
1475 // Debugging 1362 // Debugging
1476 1363
1477 // Calls Abort(msg) if the condition cc is not satisfied. 1364 // Calls Abort(msg) if the condition cc is not satisfied.
1478 // Use --debug_code to enable. 1365 // Use --debug_code to enable.
1479 void Assert(Condition cc, BailoutReason reason); 1366 void Assert(Condition cc, BailoutReason reason);
1480 1367
1481 void AssertFastElements(Register elements);
1482
1483 // Like Assert(), but always enabled. 1368 // Like Assert(), but always enabled.
1484 void Check(Condition cc, BailoutReason reason); 1369 void Check(Condition cc, BailoutReason reason);
1485 1370
1486 // Print a message to stdout and abort execution. 1371 // Print a message to stdout and abort execution.
1487 void Abort(BailoutReason msg); 1372 void Abort(BailoutReason msg);
1488 1373
1489 // Check that the stack is aligned. 1374 // Check that the stack is aligned.
1490 void CheckStackAlignment(); 1375 void CheckStackAlignment();
1491 1376
1492 // Verify restrictions about code generated in stubs. 1377 // Verify restrictions about code generated in stubs.
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
1680 inline Operand StackOperandForReturnAddress(int32_t disp) { 1565 inline Operand StackOperandForReturnAddress(int32_t disp) {
1681 return Operand(rsp, disp); 1566 return Operand(rsp, disp);
1682 } 1567 }
1683 1568
1684 #define ACCESS_MASM(masm) masm-> 1569 #define ACCESS_MASM(masm) masm->
1685 1570
1686 } // namespace internal 1571 } // namespace internal
1687 } // namespace v8 1572 } // namespace v8
1688 1573
1689 #endif // V8_X64_MACRO_ASSEMBLER_X64_H_ 1574 #endif // V8_X64_MACRO_ASSEMBLER_X64_H_
OLDNEW
« no previous file with comments | « src/s390/macro-assembler-s390.cc ('k') | src/x64/macro-assembler-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698