116 lines
4.6 KiB
JavaScript
116 lines
4.6 KiB
JavaScript
|
import { argCount } from "../errors.js";
|
||
|
import { COMPUTE_TYPES, convertType, getOutType } from "../types.js";
|
||
|
|
||
|
|
||
|
export default {
|
||
|
"<": ({ execute, data, target, nid, ctx }) => {
|
||
|
if (data.length != 3) argCount("<",2,data.pos);
|
||
|
let param1 = execute({ data: data[1], target});
|
||
|
let param2 = execute({ data: data[2], target:target+1});
|
||
|
let outType = getOutType(param1.type,param2.type);
|
||
|
return {
|
||
|
type: COMPUTE_TYPES.UINT,
|
||
|
code: `${param1.code}
|
||
|
${convertType(param1.type, outType, target) }
|
||
|
${param2.code}
|
||
|
${convertType(param2.type, outType, target+1)}
|
||
|
${ (["CMPU", "CMP", "FCMP"])[outType] } $${ target },$${ target },$${ target + 1 }
|
||
|
ZSN $${target},$${target},1`
|
||
|
}
|
||
|
},
|
||
|
"<=": ({ execute, data, target, nid, ctx }) => {
|
||
|
if (data.length != 3) argCount("<=",2,data.pos);
|
||
|
let param1 = execute({ data: data[1], target});
|
||
|
let param2 = execute({ data: data[2], target:target+1});
|
||
|
let outType = getOutType(param1.type,param2.type);
|
||
|
return {
|
||
|
type: COMPUTE_TYPES.UINT,
|
||
|
code: `${param1.code}
|
||
|
${convertType(param1.type, outType, target) }
|
||
|
${param2.code}
|
||
|
${convertType(param2.type, outType, target+1)}
|
||
|
${ (["CMPU", "CMP", "FCMP"])[outType] } $${ target },$${ target },$${ target + 1 }
|
||
|
ZSNP $${target},$${target},1`
|
||
|
}
|
||
|
},
|
||
|
"=": ({ execute, data, target, nid, ctx }) => {
|
||
|
if (data.length != 3) argCount("=",2,data.pos);
|
||
|
let param1 = execute({ data: data[1], target});
|
||
|
let param2 = execute({ data: data[2], target:target+1});
|
||
|
let outType = getOutType(param1.type,param2.type);
|
||
|
return {
|
||
|
type: COMPUTE_TYPES.UINT,
|
||
|
code: `${param1.code}
|
||
|
${convertType(param1.type, outType, target) }
|
||
|
${param2.code}
|
||
|
${convertType(param2.type, outType, target+1)}
|
||
|
${ (["CMPU", "CMP", "FCMP"])[outType] } $${ target },$${ target },$${ target + 1 }
|
||
|
ZSZ $${target},$${target},1`
|
||
|
}
|
||
|
},
|
||
|
">=": ({ execute, data, target, nid, ctx }) => {
|
||
|
if (data.length != 3) argCount(">=",2,data.pos);
|
||
|
let param1 = execute({ data: data[1], target});
|
||
|
let param2 = execute({ data: data[2], target:target+1});
|
||
|
let outType = getOutType(param1.type,param2.type);
|
||
|
return {
|
||
|
type: COMPUTE_TYPES.UINT,
|
||
|
code: `${param1.code}
|
||
|
${convertType(param1.type, outType, target) }
|
||
|
${param2.code}
|
||
|
${convertType(param2.type, outType, target+1)}
|
||
|
${ (["CMPU", "CMP", "FCMP"])[outType] } $${ target },$${ target },$${ target + 1 }
|
||
|
ZSNN $${target},$${target},1`
|
||
|
}
|
||
|
},
|
||
|
">": ({ execute, data, target, nid, ctx }) => {
|
||
|
if (data.length != 3) argCount(">",2,data.pos);
|
||
|
let param1 = execute({ data: data[1], target});
|
||
|
let param2 = execute({ data: data[2], target:target+1});
|
||
|
let outType = getOutType(param1.type,param2.type);
|
||
|
return {
|
||
|
type: COMPUTE_TYPES.UINT,
|
||
|
code: `${param1.code}
|
||
|
${convertType(param1.type, outType, target) }
|
||
|
${param2.code}
|
||
|
${convertType(param2.type, outType, target+1)}
|
||
|
${ (["CMPU", "CMP", "FCMP"])[outType] } $${ target },$${ target },$${ target + 1 }
|
||
|
ZSP $${target},$${target},1`
|
||
|
}
|
||
|
},
|
||
|
"!=": ({ execute, data, target, nid, ctx }) => {
|
||
|
if (data.length != 3) argCount("!=",2,data.pos);
|
||
|
let param1 = execute({ data: data[1], target});
|
||
|
let param2 = execute({ data: data[2], target:target+1});
|
||
|
let outType = getOutType(param1.type,param2.type);
|
||
|
return {
|
||
|
type: COMPUTE_TYPES.UINT,
|
||
|
code: `${param1.code}
|
||
|
${convertType(param1.type, outType, target) }
|
||
|
${param2.code}
|
||
|
${convertType(param2.type, outType, target+1)}
|
||
|
${ (["CMPU", "CMP", "FCMP"])[outType] } $${ target },$${ target },$${ target + 1 }
|
||
|
ZSNZ $${target},$${target},1`
|
||
|
}
|
||
|
},
|
||
|
"!": ({ execute, data, target, nid, ctx }) => {
|
||
|
if (data.length != 2) argCount("!", 1, data.pos);
|
||
|
let param = execute({ data: data[1], target });
|
||
|
return {
|
||
|
type: COMPUTE_TYPES.UINT,
|
||
|
code: `${param.code}
|
||
|
${(["CMPU", "CMP", "FCMP"])[param.type]} $${target},$${target},0
|
||
|
ZSZ $${target},$${target},1`
|
||
|
}
|
||
|
},
|
||
|
"!!": ({ execute, data, target, nid, ctx }) => {
|
||
|
if (data.length != 2) argCount("!!", 1, data.pos);
|
||
|
let param = execute({ data: data[1], target });
|
||
|
return {
|
||
|
type: COMPUTE_TYPES.UINT,
|
||
|
code: `${param.code}
|
||
|
${(["CMPU", "CMP", "FCMP"])[param.type]} $${target},$${target},0
|
||
|
ZSNZ $${target},$${target},1`
|
||
|
}
|
||
|
},
|
||
|
};
|