summaryrefslogtreecommitdiff
path: root/crenshaw
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2018-08-15 15:19:36 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2018-08-15 15:19:36 +0200
commit7870e75d7da7a03a62ca82406bc2cf6dbb92f99e (patch)
tree291ee92e7021a55d8bb0edc139470264bcbeed75 /crenshaw
parente2a3a2b217e8dcc1e3f4ec67c00a7a98d07fa698 (diff)
downloadcompilertests-7870e75d7da7a03a62ca82406bc2cf6dbb92f99e.tar.gz
compilertests-7870e75d7da7a03a62ca82406bc2cf6dbb92f99e.tar.bz2
crenshaw: some testing on 64-bit
Diffstat (limited to 'crenshaw')
-rw-r--r--crenshaw/emul.c2
-rw-r--r--crenshaw/main.pas10
2 files changed, 10 insertions, 2 deletions
diff --git a/crenshaw/emul.c b/crenshaw/emul.c
index 2cdc04c..e84c4b7 100644
--- a/crenshaw/emul.c
+++ b/crenshaw/emul.c
@@ -164,7 +164,7 @@ int main( int argc, char *argv[] )
}
}
- cs_free( instr );
+ cs_free( instr, 1 );
cs_close( &cs );
uc_close( uc );
diff --git a/crenshaw/main.pas b/crenshaw/main.pas
index dd49dd1..3e9e0a4 100644
--- a/crenshaw/main.pas
+++ b/crenshaw/main.pas
@@ -42,6 +42,11 @@ begin
IsDigit := c in ['0'..'9'];
end;
+function IsAddop(c: char): boolean;
+begin
+ IsAddop := c in ['+', '-'];
+end;
+
function GetName : char;
begin
if not IsAlpha(Look) then Expected('Name');
@@ -135,7 +140,10 @@ end;
procedure Expression;
begin
- Term;
+ if IsAddop(Look) then
+ EmitLn('MOV eax, 0')
+ else
+ Term;
while Look in ['+', '-'] do
begin
EmitLn('push eax');