You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The current structs that are implemented do not work correctly. There are two issues. First issue is the struct returned in a function is not correct. Secondly, when I use #pragma CRT ZCRT with void main(){}, my returned struct gives an address value.
2. First issue - returning structs
DerelictDrone posted this image with working code were 2D vector addition is executed but in the result the register R2 should be 4 and not 3. I tested this code and I get the same result. The issue lies with returning the struct since outputting x and y within the function itself gives the correct values. source: (#17)
3. Second issue - using void main() {}
Furthermore, when I try using structs with #pragma CRT ZCRT and with void main(){} instead of the main label, the returned struct has an address value. See code and result below.
Code:
//#pragma set OutputFinalListing true
#pragma CRT ZCRT
//jmp main
struct vec2 {
float x;
float y;
};
vec2 addvec(vec2 v, vec2 v2) {
v.x += v2.x;
v.y += v2.y;
return v;
}
vec2 v;
vec2 v2;
//main:
void main() {
v.x = 1;
v.y = 2;
v2.x = 3;
v2.y = 4;
MOV R0,v.x
MOV R1,v.y
OUT 0, R0
OUT 1, R1
v = addvec(v,v2);
MOV R2,v.x
MOV R3,v.y
OUT 2, R2
OUT 3, R3
MOV R4,v2.x
MOV R5,v2.y
OUT 4, R4
OUT 5, R5
v2 = v
MOV R6,v2.x
MOV R7,v2.y
OUT 6, R6
OUT 7, R7
}
Result:
The text was updated successfully, but these errors were encountered:
When you pass a struct via a function you need to pass a pointer for it. Also in your code your return v is just returning v's position in the stack and not a new struct which would explain R2 being at the end of your memory.
1. The Problem
The current structs that are implemented do not work correctly. There are two issues. First issue is the struct returned in a function is not correct. Secondly, when I use #pragma CRT ZCRT with void main(){}, my returned struct gives an address value.
2. First issue - returning structs
DerelictDrone posted this image with working code were 2D vector addition is executed but in the result the register R2 should be 4 and not 3. I tested this code and I get the same result. The issue lies with returning the struct since outputting x and y within the function itself gives the correct values. source: (#17)
3. Second issue - using void main() {}
Furthermore, when I try using structs with #pragma CRT ZCRT and with void main(){} instead of the main label, the returned struct has an address value. See code and result below.
Code:
Result:
The text was updated successfully, but these errors were encountered: