diff --git a/decoder.k b/decoder.k index b05ac65bceeab41336f22f2b77e06fa768699576..60fe9d731b35811cc464670fbff7bfd9ce17d8ec 100644 --- a/decoder.k +++ b/decoder.k @@ -93,11 +93,11 @@ module DECODER <decoderBuffer> _ => B </decoderBuffer> <instructionpointer> _ => A </instructionpointer> - rule <k> OutputDisassembly => DecodedInstruction(Q, S, INumOSZToOpcode(N, O) .Operands) ... </k> + rule <k> OutputDisassembly => DecodedInstruction(Q, S, INumOSZToOpcode(N, O -Int 1) .Operands) ... </k> <ilen> Q </ilen> <REP> R </REP> <INUM> N </INUM> - <OSZ> O </OSZ> + <EOSZ> O </EOSZ> <suffix> SF </suffix> <disassemblerOut> S </disassemblerOut> diff --git a/run-on-large-program.sh b/run-on-large-program.sh new file mode 100755 index 0000000000000000000000000000000000000000..219d87ec612b07f290d25e56dd5cb04c83963255 --- /dev/null +++ b/run-on-large-program.sh @@ -0,0 +1,29 @@ +#!/bin/bash +#set -x + +CUR_DIR="$(pwd)" +SEMANTICS_DIR="$(dirname "$CUR_DIR/$0")" + +WORK_DIR="$(mktemp -d)" +OUT_FILE="$(mktemp)" +TEMP_OUT="$(mktemp)" + +trap "{ cat \"$OUT_FILE\"; rm -rf \"$WORK_DIR\"; rm -f \"$OUT_FILE\"; rm -f \"$TEMP_OUT\"; cd \"$CUR_DIR\"; }" EXIT +# https://stackoverflow.com/questions/687014/removing-created-temp-files-in-unexpected-bash-exit + +cd $WORK_DIR +split -a 3 -d "$CUR_DIR/$1" + +cd $SEMANTICS_DIR + +for filename in $WORK_DIR/*; do # https://stackoverflow.com/questions/20796200/how-to-iterate-over-files-in-a-directory-with-bash + krun -o none "$filename" > $TEMP_OUT + LINES_NEEDED="$(wc -l <$filename)" + LINES_GOT="$(wc -l <$TEMP_OUT)" + cat "$TEMP_OUT" >> "$OUT_FILE" + if [ "$LINES_NEEDED" -ne "$LINES_GOT" ] + then + >&2 echo "Lines for $FILE did not match. Needed $LINES_NEEDED, but got $LINES_GOT" + fi +done +