MCPcopy Create free account
hub / github.com/beefytech/Beef / CreateMemSet

Method CreateMemSet

IDEHelper/Backend/BeMCContext.cpp:3262–3338  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3260}
3261
3262void BeMCContext::CreateMemSet(const BeMCOperand& addr, uint8 val, int size, int align)
3263{
3264 if ((size == 8) || (size == 4) || (size == 2) || (size == 1))
3265 {
3266 BeType* type = NULL;
3267 BeMCOperand zeroVal;
3268 zeroVal.mImmediate = 0;
3269
3270 switch (size)
3271 {
3272 case 8:
3273 type = mModule->mContext->GetPrimitiveType(BeTypeCode_Int64);
3274 zeroVal.mKind = BeMCOperandKind_Immediate_i64;
3275 zeroVal.mImmediate = ((int64)val << 56) | ((int64)val << 48) | ((int64)val << 40) | ((int64)val << 32) |
3276 (val << 24) | (val << 16) | (val << 8) | val;
3277 break;
3278 case 4:
3279 type = mModule->mContext->GetPrimitiveType(BeTypeCode_Int32);
3280 zeroVal.mKind = BeMCOperandKind_Immediate_i32;
3281 zeroVal.mImmediate = (val << 24) | (val << 16) | (val << 8) | val;
3282 break;
3283 case 2:
3284 type = mModule->mContext->GetPrimitiveType(BeTypeCode_Int16);
3285 zeroVal.mKind = BeMCOperandKind_Immediate_i16;
3286 zeroVal.mImmediate = (val << 8) | val;
3287 break;
3288 case 1:
3289 type = mModule->mContext->GetPrimitiveType(BeTypeCode_Int8);
3290 zeroVal.mKind = BeMCOperandKind_Immediate_i8;
3291 zeroVal.mImmediate = val;
3292 break;
3293 }
3294
3295 auto ptrType = mModule->mContext->GetPointerTo(type);
3296
3297 auto result = AllocVirtualReg(ptrType);
3298 CreateDefineVReg(result);
3299 auto vregInfo = GetVRegInfo(result);
3300 vregInfo->mRelTo = addr;
3301 vregInfo->mIsExpr = true;
3302
3303 BeMCOperand dest;
3304 dest.mKind = BeMCOperandKind_VRegLoad;
3305 dest.mVRegIdx = result.mVRegIdx;
3306
3307 AllocInst(BeMCInstKind_Mov, dest, zeroVal);
3308 return;
3309 }
3310
3311 if (addr.IsVRegAny())
3312 {
3313 auto vregInfo = GetVRegInfo(addr);
3314 if (!vregInfo->mIsRetVal)
3315 vregInfo->mForceMem = true;
3316 CheckForce(vregInfo);
3317 }
3318
3319 if (size <= 256)

Callers

nothing calls this directly

Calls 4

IsVRegAnyMethod · 0.80
GetSymbolRefMethod · 0.80
GetPrimitiveTypeMethod · 0.45
GetPointerToMethod · 0.45

Tested by

no test coverage detected