@@ -1203,19 +1203,39 @@ class BackendX86_64 : CompilerBackend {
12031203 if (GlobalExists(name)) {
12041204 auto var = GetGlobal(name);
12051205
1206- output ~= format(
1207- " lea rax, qword [__global_%s + %d]\n " , name.Sanitise(), offset
1208- );
1206+ if (var.type.ptr) {
1207+ output ~= format(" mov rax, [__global_%s]\n " , name.Sanitise());
1208+
1209+ if (offset > 0 ) {
1210+ output ~= format(" lea rax, [rax + %d]\n " , offset);
1211+ }
1212+ }
1213+ else {
1214+ output ~= format(
1215+ " lea rax, qword [__global_%s + %d]\n " , name.Sanitise(), offset
1216+ );
1217+ }
1218+
12091219 output ~= " mov [r15], rax\n " ;
12101220 output ~= " add r15, 8\n " ;
12111221 }
12121222 else if (VariableExists(name)) {
12131223 auto var = GetVariable(name);
12141224
1215- output ~= " mov rdi, rsp\n " ;
1216- if (var.offset > 0 ) {
1217- output ~= format(" add rdi, %d\n " , var.offset + offset);
1225+ if (var.type.ptr) {
1226+ output ~= format(" mov rdi, [rsp + %d]\n " , var.offset);
1227+
1228+ if (offset > 0 ) {
1229+ output ~= format(" lea rdi, [rdi + %d]\n " , offset);
1230+ }
12181231 }
1232+ else {
1233+ output ~= " mov rdi, rsp\n " ;
1234+ if (var.offset > 0 ) {
1235+ output ~= format(" add rdi, %d\n " , var.offset + offset);
1236+ }
1237+ }
1238+
12191239 output ~= " mov [r15], rdi\n " ;
12201240 output ~= " add r15, 8\n " ;
12211241 }
0 commit comments