99#include < llvm/ADT/StringRef.h>
1010#include < llvm/IR/Type.h>
1111#include < llvm/IR/Value.h>
12+ #include < llvm/Support/raw_ostream.h>
1213namespace soll ::CodeGen {
1314
1415ExprValuePtr CodeGenFunction::emitExpr (const Expr *E) {
@@ -1011,9 +1012,18 @@ void CodeGenFunction::emitAsmSetImmutable(const CallExpr *CE) {
10111012 auto &Ctx = CGM.getContext ();
10121013 auto &Map = Ctx.getImmutableAddressMap ();
10131014 if (Map.find (StringRefName) != Map.end ()) {
1014- llvm::Value *Offset = Builder.getInt (Map.lookup (StringRefName));
1015- llvm::Value *Ptr = Builder.CreateIntToPtr (Offset, Int256PtrTy);
1016- Builder.CreateStore (Value, Ptr);
1015+ llvm::Value *Offset = emitExpr (Arguments[0 ])->load (Builder, CGM);
1016+ llvm::Value *TableOffset = Builder.getInt (Map.lookup (StringRefName));
1017+ llvm::Value *ImmutableCPtr = Builder.CreateInBoundsGEP (
1018+ CGM.getImmutableBase (), {TableOffset}, " immutable.cptr" );
1019+ Builder.CreateStore (
1020+ Offset,
1021+ Builder.CreateBitCast (ImmutableCPtr, Int256PtrTy, " immutable.ptr" ));
1022+
1023+ llvm::Value *HeapCPtr =
1024+ Builder.CreateInBoundsGEP (CGM.getHeapBase (), {Offset}, " heap.cptr" );
1025+ Builder.CreateStore (
1026+ Value, Builder.CreateBitCast (HeapCPtr, Int256PtrTy, " heap.ptr" ));
10171027 CGM.emitUpdateMemorySize (Offset, Builder.getIntN (256 , 0x20 ));
10181028 return ;
10191029 }
@@ -1032,9 +1042,16 @@ llvm::Value *CodeGenFunction::emitAsmLoadImmutable(const CallExpr *CE) {
10321042 auto &Ctx = CGM.getContext ();
10331043 auto &Map = Ctx.getImmutableAddressMap ();
10341044 if (Map.find (StringRefName) != Map.end ()) {
1035- llvm::Value *Offset = Builder.getInt (Map.lookup (StringRefName));
1036- llvm::Value *Ptr = Builder.CreateIntToPtr (Offset, Int256PtrTy);
1037- return CGM.getEndianlessValue (Builder.CreateLoad (Ptr, Int256Ty));
1045+ llvm::Value *TableOffset = Builder.getInt (Map.lookup (StringRefName));
1046+ llvm::Value *ImmutableCPtr = Builder.CreateInBoundsGEP (
1047+ CGM.getImmutableBase (), {TableOffset}, " immutable.cptr" );
1048+ llvm::Value *Offset = Builder.CreateLoad (
1049+ Builder.CreateBitCast (ImmutableCPtr, Int256PtrTy, " immutable.ptr" ));
1050+
1051+ llvm::Value *HeapCPtr =
1052+ Builder.CreateInBoundsGEP (CGM.getHeapBase (), {Offset}, " heap.cptr" );
1053+ return Builder.CreateLoad (
1054+ Builder.CreateBitCast (HeapCPtr, Int256PtrTy, " heap.ptr" ));
10381055 }
10391056 }
10401057 }
0 commit comments