scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

commit 5efea60577dfbfa7f418754bfa767a42188d2f1c
parent 7f203d3b2cc9ff58e7ce25cd9b96c3410b4dfc0d
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Wed, 23 May 2018 15:11:57 +0100

Merge branch 'master' of ssh://simple-cc.org:/var/gitrepos/scc

Diffstat:
Mas/Makefile | 1+
Das/target/x86/i286-test.s | 90-------------------------------------------------------------------------------
Mas/target/x86/i286.c | 2+-
Das/test.sh | 46----------------------------------------------
Mobjdump/Makefile | 1+
Mtests/Makefile | 2+-
Atests/as/Makefile | 9+++++++++
Atests/as/execute/Makefile | 12++++++++++++
Atests/as/execute/chktest.sh | 15+++++++++++++++
Atests/as/execute/i286.s | 146+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atests/as/execute/test.sh | 43+++++++++++++++++++++++++++++++++++++++++++
Ras/target/x80/z80-test.s -> tests/as/execute/z80.s | 0
12 files changed, 229 insertions(+), 138 deletions(-)

diff --git a/as/Makefile b/as/Makefile @@ -8,6 +8,7 @@ OBJ = main.o symbol.o ins.o parser.o expr.o myro.o MOREFLAGS = -I$(PROJECTDIR)/inc/$(STD) $(AS_CFLAGS) all: as-amd64 as-i386 as-i286 as-z80 + cp as-* $(PROJECTDIR)/rootdir/bin dep: $(PROJECTDIR)/mkdep.sh diff --git a/as/target/x86/i286-test.s b/as/target/x86/i286-test.s @@ -1,90 +0,0 @@ -/ Look in http://www.mlsite.net/8086/ -/ Look in http://www.srmuniv.ac.in/sites/default/files/2017/15CS205J-unitII.pdf -/addb reg8,reg8 - ADDB %AL,%AL / 00 C0 - ADDB %CL,%AL / 00 C8 - ADDB %DL,%AL / 00 D0 - ADDB %BL,%AL / 00 D8 - ADDB %AH,%AL / 00 E0 - ADDB %CH,%AL / 00 E8 - ADDB %DH,%AL / 00 F0 - ADDB %BH,%AL / 00 F8 - - ADDB %AL,%CL / 00 C1 - ADDB %CL,%CL / 00 C9 - ADDB %DL,%CL / 00 D1 - ADDB %BL,%CL / 00 D9 - ADDB %AH,%CL / 00 E1 - ADDB %CH,%CL / 00 E9 - ADDB %DH,%CL / 00 F1 - ADDB %BH,%CL / 00 F9 - - ADDB %AL,%DL / 00 C2 - ADDB %CL,%DL / 00 CA - ADDB %DL,%DL / 00 D2 - ADDB %BL,%DL / 00 DA - ADDB %AH,%DL / 00 E2 - ADDB %CH,%DL / 00 EA - ADDB %DH,%DL / 00 F2 - ADDB %BH,%DL / 00 FA - - ADDB %AL,%BL / 00 C3 - ADDB %CL,%BL / 00 CB - ADDB %DL,%BL / 00 D3 - ADDB %BL,%BL / 00 DB - ADDB %AH,%BL / 00 E3 - ADDB %CH,%BL / 00 EB - ADDB %DH,%BL / 00 F3 - ADDB %BH,%BL / 00 FB - - ADDB %AL,%AH / 00 C4 - ADDB %CL,%AH / 00 CC - ADDB %DL,%AH / 00 D4 - ADDB %BL,%AH / 00 DC - ADDB %AH,%AH / 00 E4 - ADDB %CH,%AH / 00 EC - ADDB %DH,%AH / 00 F4 - ADDB %BH,%AH / 00 FC - - ADDB %AL,%CH / 00 C5 - ADDB %CL,%CH / 00 CD - ADDB %DL,%CH / 00 D5 - ADDB %BL,%CH / 00 DD - ADDB %AH,%CH / 00 E5 - ADDB %CH,%CH / 00 ED - ADDB %DH,%CH / 00 F5 - ADDB %BH,%CH / 00 FD - - ADDB %AL,%DH / 00 C6 - ADDB %CL,%DH / 00 CE - ADDB %DL,%DH / 00 D6 - ADDB %BL,%DH / 00 DE - ADDB %AH,%DH / 00 E6 - ADDB %CH,%DH / 00 EE - ADDB %DH,%DH / 00 F6 - ADDB %BH,%DH / 00 FE - - ADDB %AL,%BH / 00 C7 - ADDB %CL,%BH / 00 CF - ADDB %DL,%BH / 00 D7 - ADDB %BL,%BH / 00 DF - ADDB %AH,%BH / 00 E7 - ADDB %CH,%BH / 00 EF - ADDB %DH,%BH / 00 F7 - ADDB %BH,%BH / 00 FF - -/addw reg16,reg16 -/ ADDW %AX,%AX / 01 C0 -/ ADDW %CX,%AX / 01 C8 -/ ADDW %DX,%AX / 01 D0 -/ ADDW %BX,%AX / 01 D8 -/ ADDW %SP,%AX / 01 E0 -/ ADDW %BP,%AX / 01 E8 -/ ADDW %SI,%AX / 01 F0 -/ ADDW %DI,%AX / 01 F8 -/ -/-- -/ ADDB %AL,(%AX) / 02 -/ ADDW %AX,(%AX) / 03 -/ ADDB 64,%AL / 04 40 -/ ADDW 32,%AX / 05 20 diff --git a/as/target/x86/i286.c b/as/target/x86/i286.c @@ -24,7 +24,7 @@ iarch(void) "AL", AREG_AL, "AH", AREG_AH, - "BC", AREG_BX, + "BX", AREG_BX, "BL", AREG_BL, "BH", AREG_BH, diff --git a/as/test.sh b/as/test.sh @@ -1,46 +0,0 @@ -#!/bin/sh - -set -e -file=${1?} -exec >test.log -exec 2>&1 - -tmp1=`mktemp` -tmp2=`mktemp` - -trap "rm -f a.out $tmp1 $tmp2" 0 2 3 - -./as-$cpu $file - -sed -n '/^\// ! { - s%.*/%% - s%^[ ]*%% - s%[ ]*$%% - /^$/d - s%[ ][ ]*%\ -%g - p -}' $file | -nl -b a > $tmp1 - - -../objdump/objdump | -sed -n '/^data:/,$ { - /^data:/ ! { - s%.*:%% - s%^[ ]*%% - s%[ ]*$%% - /^$/d - s%[ ][ ]*%\ -%g - p - } -}' | -nl -b a > $tmp2 - -printf "test.s\n" -cat $tmp1 -printf "\nobjdump\n" -cat $tmp2 -printf "\ndiff\n" -diff -u $tmp1 $tmp2 diff --git a/objdump/Makefile b/objdump/Makefile @@ -7,6 +7,7 @@ include $(LIBDIR)/libdep.mk OBJ = main.o all: objdump + cp objdump $(PROJECTDIR)/rootdir/bin objdump: $(OBJ) $(LIBDIR)/libscc.a $(CC) $(SCC_LDFLAGS) $(OBJ) -lscc -o $@ diff --git a/tests/Makefile b/tests/Makefile @@ -3,7 +3,7 @@ PROJECTDIR = .. include $(PROJECTDIR)/rules.mk -DIRS=ar nm +DIRS=ar nm as all clean: $(FORALL) diff --git a/tests/as/Makefile b/tests/as/Makefile @@ -0,0 +1,9 @@ +.POSIX: + +PROJECTDIR = ../.. +include $(PROJECTDIR)/rules.mk + +DIRS=execute + +all clean: + $(FORALL) diff --git a/tests/as/execute/Makefile b/tests/as/execute/Makefile @@ -0,0 +1,12 @@ +.POSIX: + +PROJECTDIR=$$PWD/../../../ +ROOTDIR=$(PROJECTDIR)/rootdir + +all: tests + +tests: + PATH=$(ROOTDIR)/bin:$$PATH ./chktest.sh + +clean: + rm -f test.log diff --git a/tests/as/execute/chktest.sh b/tests/as/execute/chktest.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +ttyflags=`stty -g` +trap "stty $ttyflags; tabs -8" 0 2 3 15 +stty tabs +ulimit -c 0 +rm -f test.log + +for i in *.s +do + cpu="${i%.s}" + printf "Test: %s\n\n" $cpu >> test.log + printf " Testing cpu=%s\t" $cpu + ./test.sh $cpu && echo [OK] || echo [FAIL] +done diff --git a/tests/as/execute/i286.s b/tests/as/execute/i286.s @@ -0,0 +1,146 @@ +/ Look in http://www.mlsite.net/8086/ +/ Look in http://www.srmuniv.ac.in/sites/default/files/2017/15CS205J-unitII.pdf + + ADDB AL,AL / 00 C0 + ADDB CL,AL / 00 C8 + ADDB DL,AL / 00 D0 + ADDB BL,AL / 00 D8 + ADDB AH,AL / 00 E0 + ADDB CH,AL / 00 E8 + ADDB DH,AL / 00 F0 + ADDB BH,AL / 00 F8 + + ADDW AX,AX / 01 C0 + ADDW CX,AX / 01 C8 + ADDW DX,AX / 01 D0 + ADDW BX,AX / 01 D8 + ADDW SP,AX / 01 E0 + ADDW BP,AX / 01 E8 + ADDW SI,AX / 01 F0 + ADDW DI,AX / 01 F8 + + ADDB AL,CL / 00 C1 + ADDB CL,CL / 00 C9 + ADDB DL,CL / 00 D1 + ADDB BL,CL / 00 D9 + ADDB AH,CL / 00 E1 + ADDB CH,CL / 00 E9 + ADDB DH,CL / 00 F1 + ADDB BH,CL / 00 F9 + + ADDW AX,CX / 01 C1 + ADDW CX,CX / 01 C9 + ADDW DX,CX / 01 D1 + ADDW BX,CX / 01 D9 + ADDW SP,CX / 01 E1 + ADDW BP,CX / 01 E9 + ADDW SI,CX / 01 F1 + ADDW DI,CX / 01 F9 + + ADDB AL,DL / 00 C2 + ADDB CL,DL / 00 CA + ADDB DL,DL / 00 D2 + ADDB BL,DL / 00 DA + ADDB AH,DL / 00 E2 + ADDB CH,DL / 00 EA + ADDB DH,DL / 00 F2 + ADDB BH,DL / 00 FA + + ADDW AX,DX / 01 C2 + ADDW CX,DX / 01 CA + ADDW DX,DX / 01 D2 + ADDW BX,DX / 01 DA + ADDW SP,DX / 01 E2 + ADDW BP,DX / 01 EA + ADDW SI,DX / 01 F2 + ADDW DI,DX / 01 FA + + ADDB AL,BL / 00 C3 + ADDB CL,BL / 00 CB + ADDB DL,BL / 00 D3 + ADDB BL,BL / 00 DB + ADDB AH,BL / 00 E3 + ADDB CH,BL / 00 EB + ADDB DH,BL / 00 F3 + ADDB BH,BL / 00 FB + + ADDW AX,BX / 01 C3 + ADDW CX,BX / 01 CB + ADDW DX,BX / 01 D3 + ADDW BX,BX / 01 DB + ADDW SP,BX / 01 E3 + ADDW BP,BX / 01 EB + ADDW SI,BX / 01 F3 + ADDW DI,BX / 01 FB + + ADDB AL,AH / 00 C4 + ADDB CL,AH / 00 CC + ADDB DL,AH / 00 D4 + ADDB BL,AH / 00 DC + ADDB AH,AH / 00 E4 + ADDB CH,AH / 00 EC + ADDB DH,AH / 00 F4 + ADDB BH,AH / 00 FC + + ADDW AX,SP / 01 C4 + ADDW CX,SP / 01 CC + ADDW DX,SP / 01 D4 + ADDW BX,SP / 01 DC + ADDW SP,SP / 01 E4 + ADDW BP,SP / 01 EC + ADDW SI,SP / 01 F4 + ADDW DI,SP / 01 FC + + ADDB AL,CH / 00 C5 + ADDB CL,CH / 00 CD + ADDB DL,CH / 00 D5 + ADDB BL,CH / 00 DD + ADDB AH,CH / 00 E5 + ADDB CH,CH / 00 ED + ADDB DH,CH / 00 F5 + ADDB BH,CH / 00 FD + + ADDW AX,BP / 01 C5 + ADDW CX,BP / 01 CD + ADDW DX,BP / 01 D5 + ADDW BX,BP / 01 DD + ADDW SP,BP / 01 E5 + ADDW BP,BP / 01 ED + ADDW SI,BP / 01 F5 + ADDW DI,BP / 01 FD + + ADDB AL,DH / 00 C6 + ADDB CL,DH / 00 CE + ADDB DL,DH / 00 D6 + ADDB BL,DH / 00 DE + ADDB AH,DH / 00 E6 + ADDB CH,DH / 00 EE + ADDB DH,DH / 00 F6 + ADDB BH,DH / 00 FE + + ADDW AX,SI / 01 C6 + ADDW CX,SI / 01 CE + ADDW DX,SI / 01 D6 + ADDW BX,SI / 01 DE + ADDW SP,SI / 01 E6 + ADDW BP,SI / 01 EE + ADDW SI,SI / 01 F6 + ADDW DI,SI / 01 FE + + ADDB AL,BH / 00 C7 + ADDB CL,BH / 00 CF + ADDB DL,BH / 00 D7 + ADDB BL,BH / 00 DF + ADDB AH,BH / 00 E7 + ADDB CH,BH / 00 EF + ADDB DH,BH / 00 F7 + ADDB BH,BH / 00 FF + + ADDW AX,DI / 01 C7 + ADDW CX,DI / 01 CF + ADDW DX,DI / 01 D7 + ADDW BX,DI / 01 DF + ADDW SP,DI / 01 E7 + ADDW BP,DI / 01 EF + ADDW SI,DI / 01 F7 + ADDW DI,DI / 01 FF diff --git a/tests/as/execute/test.sh b/tests/as/execute/test.sh @@ -0,0 +1,43 @@ +#!/bin/sh + +set -e +cpu=${1?} +exec >>test.log +exec 2>&1 + +tmp1=`mktemp` +tmp2=`mktemp` +file=$cpu.s + +trap "rm -f a.out $tmp1 $tmp2" 0 2 3 + +as-$cpu $file + +sed -n '/^\// ! { + s%.*/%% + s%^[ ]*%% + s%[ ]*$%% + /^$/d + s%[ ][ ]*%\ +%g + p +}' $file | +nl -b a > $tmp1 + + +objdump | +sed -n '/^data:/,$ { + /^data:/ ! { + s%.*:%% + s%^[ ]*%% + s%[ ]*$%% + /^$/d + s%[ ][ ]*%\ +%g + p + } +}' | +nl -b a > $tmp2 + +echo diff +diff -u $tmp1 $tmp2 diff --git a/as/target/x80/z80-test.s b/tests/as/execute/z80.s