1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
8 // Some things that are used by both LSRA and regpredict allocators.
16 FT_DOUBLE_ALIGN_FRAME,
28 DEFAULT_DOUBLE_ALIGN = CAN_DOUBLE_ALIGN
36 /*****************************************************************************/
37 /*****************************************************************************/
39 // This enumeration specifies register restrictions for the predictor
42 PREDICT_NONE, // any subtree
43 PREDICT_ADDR, // subtree is left side of an assignment
44 PREDICT_REG, // subtree must be any register
45 PREDICT_SCRATCH_REG, // subtree must be any writable register
47 #if defined(_TARGET_ARM_)
48 PREDICT_PAIR_R0R1, // subtree will write R0 and R1
49 PREDICT_PAIR_R2R3, // subtree will write R2 and R3
51 #elif defined(_TARGET_AMD64_)
53 PREDICT_NOT_REG_EAX, // subtree must be any writable register, except EAX
54 PREDICT_NOT_REG_ECX, // subtree must be any writable register, except ECX
56 #elif defined(_TARGET_X86_)
58 PREDICT_NOT_REG_EAX, // subtree must be any writable register, except EAX
59 PREDICT_NOT_REG_ECX, // subtree must be any writable register, except ECX
61 PREDICT_PAIR_EAXEDX, // subtree will write EAX and EDX
62 PREDICT_PAIR_ECXEBX, // subtree will write ECX and EBX
65 #error "Unknown Target!"
68 #define REGDEF(name, rnum, mask, sname) PREDICT_REG_##name,
71 // The following are use whenever we have a ASG node into a LCL_VAR that
72 // we predict to be enregistered. This flags indicates that we can expect
73 // to use the register that is being assigned into as the temporary to
74 // compute the right side of the ASGN node.
76 PREDICT_REG_VAR_T00, // write the register used by tracked varable 00
77 PREDICT_REG_VAR_MAX = PREDICT_REG_VAR_T00 + lclMAX_TRACKED - 1,
79 PREDICT_COUNT = PREDICT_REG_VAR_T00,
81 #define REGDEF(name, rnum, mask, sname)
82 #define REGALIAS(alias, realname) PREDICT_REG_##alias = PREDICT_REG_##realname,
85 #if defined(_TARGET_ARM_)
87 PREDICT_REG_FIRST = PREDICT_REG_R0,
88 PREDICT_INTRET = PREDICT_REG_R0,
89 PREDICT_LNGRET = PREDICT_PAIR_R0R1,
90 PREDICT_FLTRET = PREDICT_REG_F0,
92 #elif defined(_TARGET_AMD64_)
94 PREDICT_REG_FIRST = PREDICT_REG_RAX,
95 PREDICT_INTRET = PREDICT_REG_EAX,
96 PREDICT_LNGRET = PREDICT_REG_RAX,
98 #elif defined(_TARGET_X86_)
100 PREDICT_REG_FIRST = PREDICT_REG_EAX,
101 PREDICT_INTRET = PREDICT_REG_EAX,
102 PREDICT_LNGRET = PREDICT_PAIR_EAXEDX,
105 #error "Unknown _TARGET_"
109 #endif // LEGACY_BACKEND
111 #endif // REGALLOC_H_