xref: /original-bsd/sys/tahoe/align/align.c (revision 1a56dd2c)
1 /*	align.c	1.1	86/07/20	*/
2 
3 #include	"../tahoealign/align.h"
4 
5 /*
6  * Part of the parameter list is set up by locore.s.
7  * First 2 dummy variables MUST BE the first local
8  * variables; leaving place for registers 0 and 1
9  * which are not preserved by the current C compiler.
10  * Then, the array of structures and the last_operand
11  * HAVE to be in the given order, to correspond to the
12  * description of process_info in 'alignment.h'.
13  */
14 alignment()
15 {
16 	long	space_4_Register_1;	/* register 1 */
17 	long	space_4_Register_0;	/* register 0 */
18 	struct	oprnd	space_4_decoded[4];
19 	long	space_4_opcode;
20 	long	space_4_last_operand;	/* Last operand # processed */
21 	long	space_4_saved_pc;
22 	long	space_4_saved_sp;
23 
24 	register process_info *infop;
25 
26 	infop = (process_info *)&space_4_saved_sp;
27 	saved_pc = pc;
28 	saved_sp = sp;	     			/* For possible exceptions */
29 
30 	last_operand = -1;   /* To get the operand routine going correctly */
31 
32 	opCODE = 0xff & *(char *)pc;
33 	pc++;
34 	(*Table[opCODE].routine) (infop);	/* Call relevant handler */
35 	/*
36 	 * NOTE: nothing should follow, except the return.
37 	 * The register variables cannot be trusted anymore,
38 	 * if an exception is signalled.  See 'exception.c'
39 	 * to understand why.
40 	 */
41 }
42