Lines Matching +full:address +full:- +full:aligned

1 //===- Sparc.cpp ----------------------------------------------------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
15 //===----------------------------------------------------------------------===//
35 if (Ty->isAnyComplexType()) { in classifyReturnType()
57 llvm::Value *Address) const override { in decodeReturnAddress()
59 if (isAggregateTypeForABI(CGF.CurFnInfo->getReturnType())) in decodeReturnAddress()
63 return CGF.Builder.CreateGEP(CGF.Int8Ty, Address, in decodeReturnAddress()
68 llvm::Value *Address) const override { in encodeReturnAddress()
70 if (isAggregateTypeForABI(CGF.CurFnInfo->getReturnType())) in encodeReturnAddress()
71 Offset = -12; in encodeReturnAddress()
73 Offset = -8; in encodeReturnAddress()
74 return CGF.Builder.CreateGEP(CGF.Int8Ty, Address, in encodeReturnAddress()
80 //===----------------------------------------------------------------------===//
114 RValue EmitVAArg(CodeGenFunction &CGF, Address VAListAddr, QualType Ty,
120 // 1. Pad structs to a multiple of 64 bits, so they are passed 'left-aligned'
122 // 2. Expose aligned floating point elements as first-level elements, so the
126 // aligned 32-bit floats.
144 // Finish the current 64-bit word. in pad()
145 uint64_t Aligned = llvm::alignTo(Size, 64); in pad() local
146 if (Aligned > Size && Aligned <= ToSize) { in pad()
147 Elems.push_back(llvm::IntegerType::get(Context, Aligned - Size)); in pad()
148 Size = Aligned; in pad()
151 // Add whole 64-bit words. in pad()
157 // Final in-word padding. in pad()
159 Elems.push_back(llvm::IntegerType::get(Context, ToSize - Size)); in pad()
180 for (unsigned i = 0, e = StrTy->getNumElements(); i != e; ++i) { in addStruct()
181 llvm::Type *ElemTy = StrTy->getElementType(i); in addStruct()
182 uint64_t ElemOffset = Offset + Layout->getElementOffsetInBits(i); in addStruct()
183 switch (ElemTy->getTypeID()) { in addStruct()
211 return llvm::ArrayRef(Elems) == Ty->elements(); in isUsableType()
227 if (Ty->isVoidType()) in classifyType()
238 if (const EnumType *EnumTy = Ty->getAs<EnumType>()) in classifyType()
239 Ty = EnumTy->getDecl()->getIntegerType(); in classifyType()
242 if (Size < 64 && Ty->isIntegerType()) in classifyType()
245 if (const auto *EIT = Ty->getAs<BitIntType>()) in classifyType()
246 if (EIT->getNumBits() < 64) in classifyType()
249 // Other non-aggregates go in registers. in classifyType()
253 // If a C++ object has either a non-trivial copy constructor or a non-trivial in classifyType()
281 RValue SparcV9ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr, in EmitVAArg()
291 Address Addr = Address(Builder.CreateLoad(VAListAddr, "ap.cur"), in EmitVAArg()
297 Address ArgAddr = Address::invalid(); in EmitVAArg()
307 CharUnits Offset = SlotSize - TypeInfo.Width; in EmitVAArg()
323 ArgAddr = Address(Builder.CreateLoad(ArgAddr, "indirect.arg"), ArgTy, in EmitVAArg()
332 Address NextPtr = Builder.CreateConstInBoundsByteGEP(Addr, Stride, "ap.next"); in EmitVAArg()
356 llvm::Value *Address) const override;
359 llvm::Value *Address) const override { in decodeReturnAddress()
360 return CGF.Builder.CreateGEP(CGF.Int8Ty, Address, in decodeReturnAddress()
365 llvm::Value *Address) const override { in encodeReturnAddress()
366 return CGF.Builder.CreateGEP(CGF.Int8Ty, Address, in encodeReturnAddress()
367 llvm::ConstantInt::get(CGF.Int32Ty, -8)); in encodeReturnAddress()
374 llvm::Value *Address) const { in initDwarfEHRegSizeTable()
384 // 0-31: the 8-byte general-purpose registers in initDwarfEHRegSizeTable()
385 AssignToArrayRange(Builder, Address, Eight8, 0, 31); in initDwarfEHRegSizeTable()
387 // 32-63: f0-31, the 4-byte floating-point registers in initDwarfEHRegSizeTable()
388 AssignToArrayRange(Builder, Address, Four8, 32, 63); in initDwarfEHRegSizeTable()
398 AssignToArrayRange(Builder, Address, Eight8, 64, 71); in initDwarfEHRegSizeTable()
400 // 72-87: d0-15, the 8-byte floating-point registers in initDwarfEHRegSizeTable()
401 AssignToArrayRange(Builder, Address, Eight8, 72, 87); in initDwarfEHRegSizeTable()