94 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
EM_TABLE=$1
 | 
						|
argtype=$2
 | 
						|
echo "switch(p->em_opcode) {"
 | 
						|
for i in - cdflnorswz p b
 | 
						|
do
 | 
						|
	list=`$argtype $i $EM_TABLE`
 | 
						|
	case $i in
 | 
						|
	-)	args='()'
 | 
						|
		echo "	/* no arguments */"
 | 
						|
		;;
 | 
						|
	cdflnorswz)
 | 
						|
		args='(p->em_cst)'
 | 
						|
		echo "	/* one integer constant argument */"
 | 
						|
		;;
 | 
						|
	p)
 | 
						|
		args='(p->em_pnam)'
 | 
						|
		echo "	/* a procedure name argument */"
 | 
						|
		;;
 | 
						|
	b)
 | 
						|
 | 
						|
: Grumbl, an instruction label as argument is encoded in a sp_cst2
 | 
						|
 | 
						|
		args='((label) (p->em_cst))'
 | 
						|
		echo "	/* An instruction label argument */"
 | 
						|
		;;
 | 
						|
	esac
 | 
						|
	for i in $list
 | 
						|
	do
 | 
						|
		cat << EOF
 | 
						|
	case op_$i:
 | 
						|
		C_$i$args;
 | 
						|
		break;
 | 
						|
EOF
 | 
						|
	done
 | 
						|
done
 | 
						|
list=`$argtype g $EM_TABLE`
 | 
						|
cat << 'EOF'
 | 
						|
	default:
 | 
						|
/* a "g" argument */
 | 
						|
		if (p->em_argtype == nof_ptyp) {
 | 
						|
			switch(p->em_opcode) {
 | 
						|
				default:
 | 
						|
					C_error = "Illegal mnemonic";
 | 
						|
					break;
 | 
						|
EOF
 | 
						|
for i in $list
 | 
						|
do
 | 
						|
	cat << EOF
 | 
						|
				case op_$i:
 | 
						|
					C_${i}_dlb(p->em_dlb, p->em_off);
 | 
						|
					break;
 | 
						|
EOF
 | 
						|
done
 | 
						|
cat << 'EOF'
 | 
						|
			}
 | 
						|
		}
 | 
						|
		else if (p->em_argtype == sof_ptyp) {
 | 
						|
			switch(p->em_opcode) {
 | 
						|
				default:
 | 
						|
					C_error = "Illegal mnemonic";
 | 
						|
					break;
 | 
						|
EOF
 | 
						|
for i in $list
 | 
						|
do
 | 
						|
	cat << EOF
 | 
						|
				case op_$i:
 | 
						|
					C_${i}_dnam(p->em_dnam, p->em_off);
 | 
						|
					break;
 | 
						|
EOF
 | 
						|
done
 | 
						|
cat << 'EOF'
 | 
						|
			}
 | 
						|
		}
 | 
						|
		else /*argtype == cst_ptyp */ {
 | 
						|
			switch(p->em_opcode) {
 | 
						|
				default:
 | 
						|
					C_error = "Illegal mnemonic";
 | 
						|
					break;
 | 
						|
EOF
 | 
						|
for i in $list
 | 
						|
do
 | 
						|
	cat << EOF
 | 
						|
				case op_$i:
 | 
						|
					C_$i(p->em_cst);
 | 
						|
					break;
 | 
						|
EOF
 | 
						|
done
 | 
						|
cat << 'EOF'
 | 
						|
			}
 | 
						|
		}
 | 
						|
}
 | 
						|
EOF
 |