diff --git a/src/generator/gen-constructors.ts b/src/generator/gen-constructors.ts index f727eb4..2e65c6a 100644 --- a/src/generator/gen-constructors.ts +++ b/src/generator/gen-constructors.ts @@ -104,8 +104,6 @@ const generateArgs = (args: $.args): CompiledArgs => { switch (args.$) { case "simpleArgs": return generateSimpleArgs(args) - case "xchgArgs": - return generateXchgArgs(args) case "dictpush": return generateDictpush(args) } @@ -113,13 +111,6 @@ const generateArgs = (args: $.args): CompiledArgs => { throw new Error("Unexpected arg type") } -const generateXchgArgs = (_args: $.xchgArgs): CompiledArgs => { - return [ - ["arg0", t.tsNumberKeyword()], - ["arg1", t.tsNumberKeyword()], - ] -} - const generateDictpush = (_args: $.dictpush): CompiledArgs => { return [ // TODO: rename parameters diff --git a/src/generator/gen-converter.ts b/src/generator/gen-converter.ts index af63f4c..be68dc4 100644 --- a/src/generator/gen-converter.ts +++ b/src/generator/gen-converter.ts @@ -202,8 +202,6 @@ const argsLen = (args: $.args): number => { switch (args.$) { case "simpleArgs": return args.children.length - case "xchgArgs": - return 2 case "dictpush": return 2 } @@ -405,32 +403,10 @@ const generateDictpush = (name: string): t.Statement[] => { ] } -const generateXchgArgs = (name: string): t.Statement[] => { - return [ - t.variableDeclaration("const", [ - t.variableDeclarator( - t.identifier("args"), - t.callExpression(t.memberExpression(UTIL_QUALIFIER, t.identifier("twoStackArgs")), [ - t.identifier("instr"), - ]), - ), - ]), - t.returnStatement( - t.callExpression(t.memberExpression(RUNTIME_QUALIFIER, t.identifier(name)), [ - t.memberExpression(t.identifier("args"), t.numericLiteral(0), true), - t.memberExpression(t.identifier("args"), t.numericLiteral(1), true), - t.identifier("loc"), - ]), - ), - ] -} - const generateArgs = (name: string, args: $.args): t.Statement[] => { switch (args.$) { case "simpleArgs": return generateSimpleArgs(name, args.children) - case "xchgArgs": - return generateXchgArgs(name) case "dictpush": return generateDictpush(name) } diff --git a/src/generator/gen-printer.ts b/src/generator/gen-printer.ts index dc27ce5..e06724f 100644 --- a/src/generator/gen-printer.ts +++ b/src/generator/gen-printer.ts @@ -113,8 +113,6 @@ const argsLen = (args: $.args): number => { switch (args.$) { case "simpleArgs": return args.children.length - case "xchgArgs": - return 2 case "dictpush": return 2 } @@ -218,22 +216,10 @@ const generateDictpush = (): t.Statement[] => { ] } -const generateXchgArgs = (): t.Statement[] => { - return [ - writeAppend("s"), - writeToString("arg0"), - writeAppend(" "), - writeAppend("s"), - writeToString("arg1"), - ] -} - const generateArgs = (args: $.args): t.Statement[] => { switch (args.$) { case "simpleArgs": return generateSimpleArgs(args.children) - case "xchgArgs": - return generateXchgArgs() case "dictpush": return generateDictpush() } diff --git a/src/generator/gen-types.ts b/src/generator/gen-types.ts index 83ef9fa..60a0ab0 100644 --- a/src/generator/gen-types.ts +++ b/src/generator/gen-types.ts @@ -163,8 +163,6 @@ const generateLoadArgs = (args: $.args): (t.Expression | t.SpreadElement)[] => { switch (args.$) { case "simpleArgs": return generateSimpleArgs(args).map(arg => wrapIntoLoad(arg)) - case "xchgArgs": - return generateXchgArgs(args).map(arg => wrapIntoLoad(arg)) case "dictpush": return generateDictpush(args).map(arg => t.spreadElement(wrapIntoLoad(arg))) } @@ -176,8 +174,6 @@ const generateStoreArgs = (args: $.args): t.Statement[] => { switch (args.$) { case "simpleArgs": return generateSimpleArgs(args).map((arg, index) => wrapIntoStore(`arg${index}`, arg)) - case "xchgArgs": - return generateXchgArgs(args).map((arg, index) => wrapIntoStore(`arg${index}`, arg)) case "dictpush": return [ wrapIntoArrayStore( @@ -190,18 +186,6 @@ const generateStoreArgs = (args: $.args): t.Statement[] => { throw new Error("Unexpected arg type") } -// uint(4), uint(4) -const generateXchgArgs = (_args: $.xchgArgs): t.Expression[] => { - return [ - t.callExpression(t.memberExpression(UTIL_QUALIFIER, t.identifier("uint")), [ - t.numericLiteral(4), - ]), - t.callExpression(t.memberExpression(UTIL_QUALIFIER, t.identifier("uint")), [ - t.numericLiteral(4), - ]), - ] -} - // codeSlice(uint(2), uint(7)) const generateCodeSlice = (args: $.codeSlice): t.Expression => { return t.callExpression(t.memberExpression(UTIL_QUALIFIER, t.identifier("codeSlice")), [ diff --git a/src/generator/instructions.ts b/src/generator/instructions.ts index 90fee5a..b64475a 100644 --- a/src/generator/instructions.ts +++ b/src/generator/instructions.ts @@ -76,14 +76,11 @@ export const hash: hash = {$: "hash"} export type setcpArg = {$: "setcpArg", range: range} export const setcpArg: setcpArg = {$: "setcpArg", range: range(-15n, 239n)} -export type args = simpleArgs | xchgArgs | dictpush +export type args = simpleArgs | dictpush export type simpleArgs = {$: "simpleArgs", children: arg[]} export const seq = (...args: arg[]): simpleArgs => ({$: "simpleArgs", children: args}) -export type xchgArgs = {$: "xchgArgs", range: range} -export const xchgArgs: xchgArgs = {$: "xchgArgs", range: range(1n, 16n)} - export type codeSlice = {$: "codeSlice", refs: arg, bits: arg} export const codeSlice = (refs: arg, bits: arg): codeSlice => ({$: "codeSlice", refs, bits}) @@ -1289,7 +1286,7 @@ export const instructions: Record = { XCHG_0I_LONG: cat("stack", mkfixedn(0x11, 8, 8, seq(stack2(8, 1n)), `exec_xchg0_l`)), XCHG_0I: cat("stack", mkfixedrangen(0x02, 0x10, 8, 4, seq(stack2(4, 1n)), `exec_xchg0`)), - XCHG_IJ: cat("stack", mkfixedn(0x10, 8, 8, xchgArgs, `exec_xchg`)), + XCHG_IJ: cat("stack", mkfixedn(0x10, 8, 8, seq(stack2(4, 1n), stack(4)), `exec_xchg`)), XCHG_1I: cat("stack", mkfixedrangen(0x12, 0x20, 8, 4, seq(s1, stack2(4, 2n)), `exec_xchg1`)), // special case: opcode with holes