OLD | NEW |
1 //===- subzero/src/IceTargetLoweringX8632.cpp - x86-32 lowering -----------===// | 1 //===- subzero/src/IceTargetLoweringX8632.cpp - x86-32 lowering -----------===// |
2 // | 2 // |
3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // This file implements the TargetLoweringX8632 class, which | 10 // This file implements the TargetLoweringX8632 class, which |
(...skipping 2083 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2094 // is used. | 2094 // is used. |
2095 Context.insert(InstFakeDef::create(Func, Spill)); | 2095 Context.insert(InstFakeDef::create(Func, Spill)); |
2096 _store(T_Lo, SpillLo); | 2096 _store(T_Lo, SpillLo); |
2097 _mov(T_Hi, hiOperand(Src0)); | 2097 _mov(T_Hi, hiOperand(Src0)); |
2098 _store(T_Hi, SpillHi); | 2098 _store(T_Hi, SpillHi); |
2099 _movq(Dest, Spill); | 2099 _movq(Dest, Spill); |
2100 } break; | 2100 } break; |
2101 case IceType_v8i1: { | 2101 case IceType_v8i1: { |
2102 assert(Src0->getType() == IceType_i8); | 2102 assert(Src0->getType() == IceType_i8); |
2103 InstCall *Call = makeHelperCall("Sz_bitcast_i8_to_v8i1", Dest, 1); | 2103 InstCall *Call = makeHelperCall("Sz_bitcast_i8_to_v8i1", Dest, 1); |
2104 Variable *Src0AsI32 = Func->makeVariable(IceType_i32, Context.getNode()); | 2104 Variable *Src0AsI32 = Func->makeVariable(stackSlotType(), |
| 2105 Context.getNode()); |
2105 // Arguments to functions are required to be at least 32 bits wide. | 2106 // Arguments to functions are required to be at least 32 bits wide. |
2106 lowerCast(InstCast::create(Func, InstCast::Zext, Src0AsI32, Src0)); | 2107 lowerCast(InstCast::create(Func, InstCast::Zext, Src0AsI32, Src0)); |
2107 Call->addArg(Src0AsI32); | 2108 Call->addArg(Src0AsI32); |
2108 lowerCall(Call); | 2109 lowerCall(Call); |
2109 } break; | 2110 } break; |
2110 case IceType_v16i1: { | 2111 case IceType_v16i1: { |
2111 assert(Src0->getType() == IceType_i16); | 2112 assert(Src0->getType() == IceType_i16); |
2112 InstCall *Call = makeHelperCall("Sz_bitcast_i16_to_v16i1", Dest, 1); | 2113 InstCall *Call = makeHelperCall("Sz_bitcast_i16_to_v16i1", Dest, 1); |
2113 Variable *Src0AsI32 = Func->makeVariable(IceType_i32, Context.getNode()); | 2114 Variable *Src0AsI32 = Func->makeVariable(stackSlotType(), |
| 2115 Context.getNode()); |
2114 // Arguments to functions are required to be at least 32 bits wide. | 2116 // Arguments to functions are required to be at least 32 bits wide. |
2115 lowerCast(InstCast::create(Func, InstCast::Zext, Src0AsI32, Src0)); | 2117 lowerCast(InstCast::create(Func, InstCast::Zext, Src0AsI32, Src0)); |
2116 Call->addArg(Src0AsI32); | 2118 Call->addArg(Src0AsI32); |
2117 lowerCall(Call); | 2119 lowerCall(Call); |
2118 } break; | 2120 } break; |
2119 case IceType_v8i16: | 2121 case IceType_v8i16: |
2120 case IceType_v16i8: | 2122 case IceType_v16i8: |
2121 case IceType_v4i32: | 2123 case IceType_v4i32: |
2122 case IceType_v4f32: { | 2124 case IceType_v4f32: { |
2123 _movp(Dest, legalizeToVar(Src0)); | 2125 _movp(Dest, legalizeToVar(Src0)); |
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2701 Call->addArg(Instr->getArg(1)); | 2703 Call->addArg(Instr->getArg(1)); |
2702 Call->addArg(Instr->getArg(2)); | 2704 Call->addArg(Instr->getArg(2)); |
2703 lowerCall(Call); | 2705 lowerCall(Call); |
2704 return; | 2706 return; |
2705 } | 2707 } |
2706 case Intrinsics::Memset: { | 2708 case Intrinsics::Memset: { |
2707 // The value operand needs to be extended to a stack slot size | 2709 // The value operand needs to be extended to a stack slot size |
2708 // because "push" only works for a specific operand size. | 2710 // because "push" only works for a specific operand size. |
2709 Operand *ValOp = Instr->getArg(1); | 2711 Operand *ValOp = Instr->getArg(1); |
2710 assert(ValOp->getType() == IceType_i8); | 2712 assert(ValOp->getType() == IceType_i8); |
2711 Variable *ValExt = makeReg(stackSlotType()); | 2713 Variable *ValExt = Func->makeVariable(stackSlotType(), Context.getNode()); |
2712 _movzx(ValExt, ValOp); | 2714 lowerCast(InstCast::create(Func, InstCast::Zext, ValExt, ValOp)); |
2713 InstCall *Call = makeHelperCall("memset", NULL, 3); | 2715 InstCall *Call = makeHelperCall("memset", NULL, 3); |
2714 Call->addArg(Instr->getArg(0)); | 2716 Call->addArg(Instr->getArg(0)); |
2715 Call->addArg(ValExt); | 2717 Call->addArg(ValExt); |
2716 Call->addArg(Instr->getArg(2)); | 2718 Call->addArg(Instr->getArg(2)); |
2717 lowerCall(Call); | 2719 lowerCall(Call); |
2718 return; | 2720 return; |
2719 } | 2721 } |
2720 case Intrinsics::NaClReadTP: { | 2722 case Intrinsics::NaClReadTP: { |
2721 Constant *Zero = Ctx->getConstantZero(IceType_i32); | 2723 Constant *Zero = Ctx->getConstantZero(IceType_i32); |
2722 Operand *Src = OperandX8632Mem::create(Func, IceType_i32, NULL, Zero, NULL, | 2724 Operand *Src = OperandX8632Mem::create(Func, IceType_i32, NULL, Zero, NULL, |
(...skipping 1026 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3749 for (SizeT i = 0; i < Size; ++i) { | 3751 for (SizeT i = 0; i < Size; ++i) { |
3750 Str << "\t.byte\t" << (((unsigned)Data[i]) & 0xff) << "\n"; | 3752 Str << "\t.byte\t" << (((unsigned)Data[i]) & 0xff) << "\n"; |
3751 } | 3753 } |
3752 Str << "\t.size\t" << MangledName << ", " << Size << "\n"; | 3754 Str << "\t.size\t" << MangledName << ", " << Size << "\n"; |
3753 } | 3755 } |
3754 Str << "\t" << (IsInternal ? ".local" : ".global") << "\t" << MangledName | 3756 Str << "\t" << (IsInternal ? ".local" : ".global") << "\t" << MangledName |
3755 << "\n"; | 3757 << "\n"; |
3756 } | 3758 } |
3757 | 3759 |
3758 } // end of namespace Ice | 3760 } // end of namespace Ice |
OLD | NEW |