add: c style register casting to supported instructions
This commit is contained in:
@@ -253,7 +253,7 @@ void sub() {
|
|||||||
if (!check_args(state->args, 0, 2)) {
|
if (!check_args(state->args, 0, 2)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
*get_reg(state->args->arg1) -= get_value(state->args->arg2);
|
*get_reg(state->args->arg1) -= apply_cast(get_value(state->args->arg2), state->args->arg2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void add() {
|
void add() {
|
||||||
@@ -261,7 +261,7 @@ void add() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
*get_reg(state->args->arg1) += get_value(state->args->arg2);
|
*get_reg(state->args->arg1) += apply_cast(get_value(state->args->arg2), state->args->arg2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -271,7 +271,7 @@ void _sqrt() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef LAIKA //Realistically Laika won't ever need sqrt, + that creates linker errors with the CRT
|
#ifndef LAIKA //Realistically Laika won't ever need sqrt, + that creates linker errors with the CRT
|
||||||
*get_reg(state->args->arg1) = (long long)sqrt(get_value(state->args->arg1));
|
*get_reg(state->args->arg1) = apply_cast((long long)sqrt(get_value(state->args->arg1)), state->args->arg1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -280,7 +280,7 @@ void neg() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
*get_reg(state->args->arg1) = -get_value(state->args->arg1);
|
*get_reg(state->args->arg1) = -apply_cast(get_value(state->args->arg1), state->args->arg1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mul() {
|
void mul() {
|
||||||
@@ -292,7 +292,7 @@ void mul() {
|
|||||||
//MSVC wants to link __allmul, but a mul is just a lot of add, isn't it ?
|
//MSVC wants to link __allmul, but a mul is just a lot of add, isn't it ?
|
||||||
|
|
||||||
long long v1 = *get_reg(state->args->arg1);
|
long long v1 = *get_reg(state->args->arg1);
|
||||||
long long v2 = get_value(state->args->arg2);
|
long long v2 = apply_cast(get_value(state->args->arg2));
|
||||||
long long result = 0;
|
long long result = 0;
|
||||||
int isNegative = 0;
|
int isNegative = 0;
|
||||||
|
|
||||||
@@ -310,7 +310,7 @@ void mul() {
|
|||||||
}
|
}
|
||||||
v1 = isNegative ? -result : result;
|
v1 = isNegative ? -result : result;
|
||||||
#else
|
#else
|
||||||
*get_reg(state->args->arg1) *= get_value(state->args->arg2);
|
*get_reg(state->args->arg1) *= apply_cast(get_value(state->args->arg2), state->args->arg2);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -351,7 +351,7 @@ void mov() {
|
|||||||
if (!check_args(state->args, 0, 2)) {
|
if (!check_args(state->args, 0, 2)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
*get_reg(state->args->arg1) = get_value(state->args->arg2);
|
*get_reg(state->args->arg1) = apply_cast(get_value(state->args->arg2), state->args->arg2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void call() {
|
void call() {
|
||||||
@@ -370,7 +370,7 @@ void push() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
long long value = get_value(state->args->arg1);
|
long long value = apply_cast(get_value(state->args->arg1), state->args->arg1);
|
||||||
if (value == 0 && !is_reg(state->args->arg1)) {
|
if (value == 0 && !is_reg(state->args->arg1)) {
|
||||||
if (state->args->arg1[0] == '\\') {
|
if (state->args->arg1[0] == '\\') {
|
||||||
switch (state->args->arg1[1]) {
|
switch (state->args->arg1[1]) {
|
||||||
|
|||||||
Reference in New Issue
Block a user