3103 match(ConL);
3104
3105 op_cost(10);
3106 format %{ %}
3107 interface(CONST_INTER);
3108 %}
3109
3110 // Long Immediate 32-bit signed
3111 operand immL32()
3112 %{
3113 predicate(n->get_long() == (int) (n->get_long()));
3114 match(ConL);
3115
3116 op_cost(15);
3117 format %{ %}
3118 interface(CONST_INTER);
3119 %}
3120
3121 operand immL_Pow2()
3122 %{
3123 predicate(is_power_of_2(n->get_long()));
3124 match(ConL);
3125
3126 op_cost(15);
3127 format %{ %}
3128 interface(CONST_INTER);
3129 %}
3130
3131 operand immL_NotPow2()
3132 %{
3133 predicate(is_power_of_2(~n->get_long()));
3134 match(ConL);
3135
3136 op_cost(15);
3137 format %{ %}
3138 interface(CONST_INTER);
3139 %}
3140
3141 // Long Immediate zero
3142 operand immL0()
3143 %{
3144 predicate(n->get_long() == 0L);
3145 match(ConL);
3146
3147 op_cost(10);
3148 format %{ %}
3149 interface(CONST_INTER);
3150 %}
3151
3152 // Constant for increment
3153 operand immL1()
10012 ins_cost(125);
10013 format %{ "orq $dst, $src\t# long" %}
10014 opcode(0x81, 0x1); /* Opcode 81 /1 id */
10015 ins_encode(REX_mem_wide(dst), OpcSE(src),
10016 RM_opc_mem(secondary, dst), Con8or32(src));
10017 ins_pipe(ialu_mem_imm);
10018 %}
10019
10020 instruct btsL_mem_imm(memory dst, immL_Pow2 con, rFlagsReg cr)
10021 %{
10022 // con should be a pure 64-bit power of 2 immediate
10023 // because AND/OR works well enough for 8/32-bit values.
10024 predicate(log2_long(n->in(3)->in(2)->get_long()) > 31);
10025
10026 match(Set dst (StoreL dst (OrL (LoadL dst) con)));
10027 effect(KILL cr);
10028
10029 ins_cost(125);
10030 format %{ "btsq $dst, log2($con)\t# long" %}
10031 ins_encode %{
10032 __ btsq($dst$$Address, log2_long($con$$constant));
10033 %}
10034 ins_pipe(ialu_mem_imm);
10035 %}
10036
10037 // Xor Instructions
10038 // Xor Register with Register
10039 instruct xorL_rReg(rRegL dst, rRegL src, rFlagsReg cr)
10040 %{
10041 match(Set dst (XorL dst src));
10042 effect(KILL cr);
10043
10044 format %{ "xorq $dst, $src\t# long" %}
10045 opcode(0x33);
10046 ins_encode(REX_reg_reg_wide(dst, src), OpcP, reg_reg(dst, src));
10047 ins_pipe(ialu_reg_reg);
10048 %}
10049
10050 // Xor Register with Immediate -1
10051 instruct xorL_rReg_im1(rRegL dst, immL_M1 imm) %{
10052 match(Set dst (XorL dst imm));
|
3103 match(ConL);
3104
3105 op_cost(10);
3106 format %{ %}
3107 interface(CONST_INTER);
3108 %}
3109
3110 // Long Immediate 32-bit signed
3111 operand immL32()
3112 %{
3113 predicate(n->get_long() == (int) (n->get_long()));
3114 match(ConL);
3115
3116 op_cost(15);
3117 format %{ %}
3118 interface(CONST_INTER);
3119 %}
3120
3121 operand immL_Pow2()
3122 %{
3123 predicate(is_power_of_2((julong)n->get_long()));
3124 match(ConL);
3125
3126 op_cost(15);
3127 format %{ %}
3128 interface(CONST_INTER);
3129 %}
3130
3131 operand immL_NotPow2()
3132 %{
3133 predicate(is_power_of_2((julong)~n->get_long()));
3134 match(ConL);
3135
3136 op_cost(15);
3137 format %{ %}
3138 interface(CONST_INTER);
3139 %}
3140
3141 // Long Immediate zero
3142 operand immL0()
3143 %{
3144 predicate(n->get_long() == 0L);
3145 match(ConL);
3146
3147 op_cost(10);
3148 format %{ %}
3149 interface(CONST_INTER);
3150 %}
3151
3152 // Constant for increment
3153 operand immL1()
10012 ins_cost(125);
10013 format %{ "orq $dst, $src\t# long" %}
10014 opcode(0x81, 0x1); /* Opcode 81 /1 id */
10015 ins_encode(REX_mem_wide(dst), OpcSE(src),
10016 RM_opc_mem(secondary, dst), Con8or32(src));
10017 ins_pipe(ialu_mem_imm);
10018 %}
10019
10020 instruct btsL_mem_imm(memory dst, immL_Pow2 con, rFlagsReg cr)
10021 %{
10022 // con should be a pure 64-bit power of 2 immediate
10023 // because AND/OR works well enough for 8/32-bit values.
10024 predicate(log2_long(n->in(3)->in(2)->get_long()) > 31);
10025
10026 match(Set dst (StoreL dst (OrL (LoadL dst) con)));
10027 effect(KILL cr);
10028
10029 ins_cost(125);
10030 format %{ "btsq $dst, log2($con)\t# long" %}
10031 ins_encode %{
10032 __ btsq($dst$$Address, log2_long((julong)$con$$constant));
10033 %}
10034 ins_pipe(ialu_mem_imm);
10035 %}
10036
10037 // Xor Instructions
10038 // Xor Register with Register
10039 instruct xorL_rReg(rRegL dst, rRegL src, rFlagsReg cr)
10040 %{
10041 match(Set dst (XorL dst src));
10042 effect(KILL cr);
10043
10044 format %{ "xorq $dst, $src\t# long" %}
10045 opcode(0x33);
10046 ins_encode(REX_reg_reg_wide(dst, src), OpcP, reg_reg(dst, src));
10047 ins_pipe(ialu_reg_reg);
10048 %}
10049
10050 // Xor Register with Immediate -1
10051 instruct xorL_rReg_im1(rRegL dst, immL_M1 imm) %{
10052 match(Set dst (XorL dst imm));
|