Skip to content

Commit b332876

Browse files
committed
fix non cell sized parameters on x86_64
1 parent 06e7a85 commit b332876

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

source/backends/x86_64.d

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class BackendX86_64 : CompilerBackend {
4949
bool useLibc;
5050
uint tempLabelNum;
5151
bool useGas = false;
52-
bool useFramePtr = true;
52+
bool useFramePtr = false;
5353
int[string] fileID;
5454

5555
this() {
@@ -875,7 +875,8 @@ class BackendX86_64 : CompilerBackend {
875875
var.type.type = GetType(type.name);
876876
var.type.ptr = type.ptr;
877877
var.offset = cast(uint) offset;
878-
offset += var.Size();
878+
var.stackSize = 8;
879+
offset += var.StackSize();
879880
variables ~= var;
880881
}
881882

@@ -904,7 +905,7 @@ class BackendX86_64 : CompilerBackend {
904905

905906
size_t scopeSize;
906907
foreach (ref var ; variables) {
907-
scopeSize += var.Size();
908+
scopeSize += var.StackSize();
908909

909910
if (var.type.hasDeinit && !var.type.ptr) {
910911
output ~= format("lea rax, [rsp + %d]\n", var.offset);
@@ -1208,7 +1209,7 @@ class BackendX86_64 : CompilerBackend {
12081209
else {
12091210
size_t scopeSize;
12101211
foreach (ref var ; variables) {
1211-
scopeSize += var.Size();
1212+
scopeSize += var.StackSize();
12121213

12131214
if (var.type.hasDeinit && !var.type.ptr) {
12141215
output ~= format("lea rax, [rsp + %d\n]", var.offset);
@@ -1431,7 +1432,7 @@ class BackendX86_64 : CompilerBackend {
14311432
else {
14321433
size_t scopeSize;
14331434
foreach (ref var ; variables) {
1434-
scopeSize += var.Size();
1435+
scopeSize += var.StackSize();
14351436

14361437
if (var.type.hasDeinit && !var.type.ptr) {
14371438
output ~= format("lea rax, [rsp + %d]\n", var.offset);

source/compiler.d

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,10 @@ struct Variable {
5252
uint offset; // SP + offset to access
5353
bool array;
5454
ulong arraySize;
55+
size_t stackSize; // use this instead of Size() if >0
5556

5657
size_t Size() => array? arraySize * type.Size() : type.Size();
58+
size_t StackSize() => stackSize > 0? stackSize : Size();
5759
}
5860

5961
struct Global {
@@ -402,7 +404,7 @@ class CompilerBackend {
402404

403405
size_t size;
404406
foreach (ref var ; variables) {
405-
size += var.Size();
407+
size += var.StackSize();
406408
}
407409

408410
return size;

0 commit comments

Comments
 (0)