Przeglądaj źródła

* only handle a_load_const_ref() directly when storing ordinals, as in case
of pointers llvm only supports 0 (as null, which we don't generate either)

git-svn-id: trunk@30676 -

Jonas Maebe 10 lat temu
rodzic
commit
3496129f79
1 zmienionych plików z 10 dodań i 2 usunięć
  1. 10 2
      compiler/llvm/hlcgllvm.pas

+ 10 - 2
compiler/llvm/hlcgllvm.pas

@@ -473,8 +473,16 @@ implementation
     var
       sref: treference;
     begin
-      sref:=make_simple_ref(list,ref,tosize);
-      list.concat(taillvm.op_size_const_size_ref(la_store,tosize,a,getpointerdef(tosize),sref))
+      { llvm instructions do not support pointer constants -> only directly
+        encode for integers; a_load_const_reg() handles pointers properly }
+      if is_ordinal(tosize) or
+         is_64bit(tosize) then
+        begin
+          sref:=make_simple_ref(list,ref,tosize);
+          list.concat(taillvm.op_size_const_size_ref(la_store,tosize,a,getpointerdef(tosize),sref))
+        end
+      else
+        inherited;
     end;