built in the compile time flag NOFLOAT to get rid of the float stuff
This commit is contained in:
		
							parent
							
								
									b6dde9472f
								
							
						
					
					
						commit
						c6a51a39f0
					
				
					 25 changed files with 150 additions and 26 deletions
				
			
		|  | @ -337,6 +337,7 @@ go_on:	/* rescan, the following character has been read	*/ | ||||||
| 		register arith val = 0; | 		register arith val = 0; | ||||||
| 
 | 
 | ||||||
| 		if (ch == '.') {	/* an embarrassing ambiguity */ | 		if (ch == '.') {	/* an embarrassing ambiguity */ | ||||||
|  | #ifndef NOFLOAT | ||||||
| 			LoadChar(vch); | 			LoadChar(vch); | ||||||
| 			PushBack(); | 			PushBack(); | ||||||
| 			if (!is_dig(vch))	/* just a `.'	*/ | 			if (!is_dig(vch))	/* just a `.'	*/ | ||||||
|  | @ -345,6 +346,9 @@ go_on:	/* rescan, the following character has been read	*/ | ||||||
| 			/*	in the rest of the compiler, all floats
 | 			/*	in the rest of the compiler, all floats
 | ||||||
| 				have to start with a digit. | 				have to start with a digit. | ||||||
| 			*/ | 			*/ | ||||||
|  | #else NOFLOAT | ||||||
|  | 			return ptok->tk_symb = ch; | ||||||
|  | #endif NOFLOAT | ||||||
| 		} | 		} | ||||||
| 		if (ch == '0') { | 		if (ch == '0') { | ||||||
| 			*np++ = ch; | 			*np++ = ch; | ||||||
|  | @ -367,7 +371,10 @@ go_on:	/* rescan, the following character has been read	*/ | ||||||
| 			ptok->tk_fund = LONG; | 			ptok->tk_fund = LONG; | ||||||
| 			return ptok->tk_symb = INTEGER; | 			return ptok->tk_symb = INTEGER; | ||||||
| 		} | 		} | ||||||
| 		if (base == 16 || !(ch == '.' || ch == 'e' || ch == 'E')) { | #ifndef NOFLOAT | ||||||
|  | 		if (base == 16 || !(ch == '.' || ch == 'e' || ch == 'E')) | ||||||
|  | #endif NOFLOAT | ||||||
|  | 		{ | ||||||
| 			PushBack(); | 			PushBack(); | ||||||
| 			ptok->tk_ival = val; | 			ptok->tk_ival = val; | ||||||
| 			/*	The semantic analyser must know if the
 | 			/*	The semantic analyser must know if the
 | ||||||
|  | @ -383,6 +390,7 @@ go_on:	/* rescan, the following character has been read	*/ | ||||||
| 			return ptok->tk_symb = INTEGER; | 			return ptok->tk_symb = INTEGER; | ||||||
| 		} | 		} | ||||||
| 		/* where's the test for the length of the integral ???	*/ | 		/* where's the test for the length of the integral ???	*/ | ||||||
|  | #ifndef NOFLOAT | ||||||
| 		if (ch == '.'){ | 		if (ch == '.'){ | ||||||
| 			if (np < &buf[NUMSIZE]) | 			if (np < &buf[NUMSIZE]) | ||||||
| 				*np++ = ch; | 				*np++ = ch; | ||||||
|  | @ -423,6 +431,7 @@ go_on:	/* rescan, the following character has been read	*/ | ||||||
| 		else | 		else | ||||||
| 			ptok->tk_fval = Salloc(buf, np - buf) + 1; | 			ptok->tk_fval = Salloc(buf, np - buf) + 1; | ||||||
| 		return ptok->tk_symb = FLOATING; | 		return ptok->tk_symb = FLOATING; | ||||||
|  | #endif NOFLOAT | ||||||
| 	} | 	} | ||||||
| 	case STEOI:			/* end of text on source file	*/ | 	case STEOI:			/* end of text on source file	*/ | ||||||
| 		return ptok->tk_symb = EOI; | 		return ptok->tk_symb = EOI; | ||||||
|  |  | ||||||
|  | @ -21,7 +21,9 @@ struct token	{ | ||||||
| 			int tok_fund;	/* INT or LONG */ | 			int tok_fund;	/* INT or LONG */ | ||||||
| 			arith tok_ival; | 			arith tok_ival; | ||||||
| 		} tok_integer; | 		} tok_integer; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 		char *tok_fval; | 		char *tok_fval; | ||||||
|  | #endif NOFLOAT | ||||||
| 	} tok_data; | 	} tok_data; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -33,7 +35,9 @@ struct token	{ | ||||||
| #define tk_len	tok_data.tok_string.tok_len | #define tk_len	tok_data.tok_string.tok_len | ||||||
| #define tk_fund	tok_data.tok_integer.tok_fund | #define tk_fund	tok_data.tok_integer.tok_fund | ||||||
| #define tk_ival	tok_data.tok_integer.tok_ival | #define tk_ival	tok_data.tok_integer.tok_ival | ||||||
|  | #ifndef NOFLOAT | ||||||
| #define tk_fval	tok_data.tok_fval | #define tk_fval	tok_data.tok_fval | ||||||
|  | #endif NOFLOAT | ||||||
| 
 | 
 | ||||||
| extern struct token dot, ahead, aside; | extern struct token dot, ahead, aside; | ||||||
| extern unsigned int LineNumber;	/* "LLlex.c"	*/ | extern unsigned int LineNumber;	/* "LLlex.c"	*/ | ||||||
|  |  | ||||||
|  | @ -44,8 +44,10 @@ insert_token(tk) | ||||||
| 		dot.tk_fund = INT; | 		dot.tk_fund = INT; | ||||||
| 		dot.tk_ival = 1; | 		dot.tk_ival = 1; | ||||||
| 		break; | 		break; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	case FLOATING: | 	case FLOATING: | ||||||
| 		dot.tk_fval = Salloc("0.0", 4); | 		dot.tk_fval = Salloc("0.0", 4); | ||||||
| 		break; | 		break; | ||||||
|  | #endif NOFLOAT | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -66,8 +66,10 @@ | ||||||
| #define SZ_WORD		(arith)4 | #define SZ_WORD		(arith)4 | ||||||
| #define	SZ_INT		(arith)4 | #define	SZ_INT		(arith)4 | ||||||
| #define	SZ_LONG		(arith)4 | #define	SZ_LONG		(arith)4 | ||||||
|  | #ifndef NOFLOAT | ||||||
| #define	SZ_FLOAT	(arith)4 | #define	SZ_FLOAT	(arith)4 | ||||||
| #define	SZ_DOUBLE	(arith)8 | #define	SZ_DOUBLE	(arith)8 | ||||||
|  | #endif NOFLOAT | ||||||
| #define	SZ_POINTER	(arith)4 | #define	SZ_POINTER	(arith)4 | ||||||
| 
 | 
 | ||||||
| /* target machine alignment requirements	*/ | /* target machine alignment requirements	*/ | ||||||
|  | @ -76,8 +78,10 @@ | ||||||
| #define AL_WORD		SZ_WORD | #define AL_WORD		SZ_WORD | ||||||
| #define	AL_INT		SZ_WORD | #define	AL_INT		SZ_WORD | ||||||
| #define	AL_LONG		SZ_WORD | #define	AL_LONG		SZ_WORD | ||||||
|  | #ifndef NOFLOAT | ||||||
| #define	AL_FLOAT	SZ_WORD | #define	AL_FLOAT	SZ_WORD | ||||||
| #define	AL_DOUBLE	SZ_WORD | #define	AL_DOUBLE	SZ_WORD | ||||||
|  | #endif NOFLOAT | ||||||
| #define	AL_POINTER	SZ_WORD | #define	AL_POINTER	SZ_WORD | ||||||
| #define AL_STRUCT	1 | #define AL_STRUCT	1 | ||||||
| #define AL_UNION	1 | #define AL_UNION	1 | ||||||
|  |  | ||||||
|  | @ -3,7 +3,10 @@ | ||||||
| 
 | 
 | ||||||
| extern int | extern int | ||||||
| 	short_align, word_align, int_align, long_align, | 	short_align, word_align, int_align, long_align, | ||||||
| 	float_align, double_align, pointer_align, | #ifndef NOFLOAT | ||||||
|  | 	float_align, double_align, | ||||||
|  | #endif NOFLOAT | ||||||
|  | 	pointer_align, | ||||||
| 	struct_align, union_align; | 	struct_align, union_align; | ||||||
| 
 | 
 | ||||||
| extern arith align(); | extern arith align(); | ||||||
|  |  | ||||||
|  | @ -36,6 +36,7 @@ arithbalance(e1p, oper, e2p)	/* RM 6.6 */ | ||||||
| 	t2 = any2arith(e2p, oper); | 	t2 = any2arith(e2p, oper); | ||||||
| 
 | 
 | ||||||
| 	/* Now t1 and t2 are either INT or LONG or DOUBLE */ | 	/* Now t1 and t2 are either INT or LONG or DOUBLE */ | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	if (t1 == DOUBLE && t2 != DOUBLE) | 	if (t1 == DOUBLE && t2 != DOUBLE) | ||||||
| 		t2 = int2float(e2p, double_type); | 		t2 = int2float(e2p, double_type); | ||||||
| 	else | 	else | ||||||
|  | @ -44,6 +45,7 @@ arithbalance(e1p, oper, e2p)	/* RM 6.6 */ | ||||||
| 	else | 	else | ||||||
| 	if (t1 == DOUBLE) | 	if (t1 == DOUBLE) | ||||||
| 		return DOUBLE; | 		return DOUBLE; | ||||||
|  | #endif NOFLOAT | ||||||
| 
 | 
 | ||||||
| 	/* Now they are INT or LONG */ | 	/* Now they are INT or LONG */ | ||||||
| 	u1 = (*e1p)->ex_type->tp_unsigned; | 	u1 = (*e1p)->ex_type->tp_unsigned; | ||||||
|  | @ -148,11 +150,13 @@ any2arith(expp, oper) | ||||||
| 			expr_warning(*expp, "%s on enum", symbol2str(oper)); | 			expr_warning(*expp, "%s on enum", symbol2str(oper)); | ||||||
| 		int2int(expp, int_type); | 		int2int(expp, int_type); | ||||||
| 		break; | 		break; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	case FLOAT: | 	case FLOAT: | ||||||
| 		float2float(expp, double_type); | 		float2float(expp, double_type); | ||||||
| 		break; | 		break; | ||||||
| 	case DOUBLE: | 	case DOUBLE: | ||||||
| 		break; | 		break; | ||||||
|  | #endif NOFLOAT | ||||||
| #ifndef NOBITFIELD | #ifndef NOBITFIELD | ||||||
| 	case FIELD: | 	case FIELD: | ||||||
| 		field2arith(expp); | 		field2arith(expp); | ||||||
|  | @ -220,6 +224,7 @@ int2int(expp, tp) | ||||||
| 	return (*expp)->ex_type->tp_fund; | 	return (*expp)->ex_type->tp_fund; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #ifndef NOFLOAT | ||||||
| int | int | ||||||
| int2float(expp, tp) | int2float(expp, tp) | ||||||
| 	struct expr **expp; | 	struct expr **expp; | ||||||
|  | @ -262,6 +267,7 @@ float2float(expp, tp) | ||||||
| 	else | 	else | ||||||
| 		*expp = arith2arith(tp, FLOAT2FLOAT, *expp); | 		*expp = arith2arith(tp, FLOAT2FLOAT, *expp); | ||||||
| } | } | ||||||
|  | #endif NOFLOAT | ||||||
| 
 | 
 | ||||||
| array2pointer(expp) | array2pointer(expp) | ||||||
| 	struct expr **expp; | 	struct expr **expp; | ||||||
|  | @ -337,8 +343,10 @@ opnd2logical(expp, oper) | ||||||
| 	case LONG: | 	case LONG: | ||||||
| 	case ENUM: | 	case ENUM: | ||||||
| 	case POINTER: | 	case POINTER: | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	case FLOAT: | 	case FLOAT: | ||||||
| 	case DOUBLE: | 	case DOUBLE: | ||||||
|  | #endif NOFLOAT | ||||||
| 		break; | 		break; | ||||||
| 	default: | 	default: | ||||||
| 		expr_error(*expp, "%s operand to %s", | 		expr_error(*expp, "%s operand to %s", | ||||||
|  | @ -429,7 +437,9 @@ any2opnd(expp, oper) | ||||||
| 	case CHAR: | 	case CHAR: | ||||||
| 	case SHORT: | 	case SHORT: | ||||||
| 	case ENUM: | 	case ENUM: | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	case FLOAT: | 	case FLOAT: | ||||||
|  | #endif NOFLOAT | ||||||
| 		any2arith(expp, oper); | 		any2arith(expp, oper); | ||||||
| 		break; | 		break; | ||||||
| 	case ARRAY: | 	case ARRAY: | ||||||
|  | @ -477,6 +487,7 @@ field2arith(expp) | ||||||
| } | } | ||||||
| #endif NOBITFIELD | #endif NOBITFIELD | ||||||
| 
 | 
 | ||||||
|  | #ifndef NOFLOAT | ||||||
| /*	switch_sign_fp() negates the given floating constant expression
 | /*	switch_sign_fp() negates the given floating constant expression
 | ||||||
| 	The lexical analyser has reserved an extra byte of space in front | 	The lexical analyser has reserved an extra byte of space in front | ||||||
| 	of the string containing the representation of the floating | 	of the string containing the representation of the floating | ||||||
|  | @ -491,3 +502,4 @@ switch_sign_fp(expr) | ||||||
| 	else | 	else | ||||||
| 		--(expr->FL_VALUE); | 		--(expr->FL_VALUE); | ||||||
| } | } | ||||||
|  | #endif NOFLOAT | ||||||
|  |  | ||||||
|  | @ -222,6 +222,7 @@ ch7cast(expp, oper, tp) | ||||||
| 					symbol2str(oper)); | 					symbol2str(oper)); | ||||||
| 			int2int(expp, tp); | 			int2int(expp, tp); | ||||||
| 		} | 		} | ||||||
|  | #ifndef NOFLOAT | ||||||
| 		else | 		else | ||||||
| 		if (oldi && !i)	{ | 		if (oldi && !i)	{ | ||||||
| 			if (oldtp->tp_fund == ENUM && oper != CAST) | 			if (oldtp->tp_fund == ENUM && oper != CAST) | ||||||
|  | @ -235,6 +236,10 @@ ch7cast(expp, oper, tp) | ||||||
| 			float2int(expp, tp); | 			float2int(expp, tp); | ||||||
| 		else		/* !oldi && !i */ | 		else		/* !oldi && !i */ | ||||||
| 			float2float(expp, tp); | 			float2float(expp, tp); | ||||||
|  | #else NOFLOAT | ||||||
|  | 		else | ||||||
|  | 			crash("(ch7cast) floats not implemented\n"); | ||||||
|  | #endif NOFLOAT | ||||||
| 	} | 	} | ||||||
| 	else | 	else | ||||||
| 	if (oldtp->tp_fund == POINTER && tp->tp_fund == POINTER)	{ | 	if (oldtp->tp_fund == POINTER && tp->tp_fund == POINTER)	{ | ||||||
|  | @ -404,8 +409,10 @@ is_arith_type(tp) | ||||||
| 	case INT: | 	case INT: | ||||||
| 	case LONG: | 	case LONG: | ||||||
| 	case ENUM: | 	case ENUM: | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	case FLOAT: | 	case FLOAT: | ||||||
| 	case DOUBLE: | 	case DOUBLE: | ||||||
|  | #endif NOFLOAT | ||||||
| 		return 1; | 		return 1; | ||||||
| #ifndef NOBITFIELD | #ifndef NOBITFIELD | ||||||
| 	case FIELD: | 	case FIELD: | ||||||
|  |  | ||||||
|  | @ -314,11 +314,13 @@ pointer_arithmetic(expp1, oper, expp2) | ||||||
| 	/*	prepares the integral expression expp2 in order to
 | 	/*	prepares the integral expression expp2 in order to
 | ||||||
| 		apply it to the pointer expression expp1 | 		apply it to the pointer expression expp1 | ||||||
| 	*/ | 	*/ | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	if (any2arith(expp2, oper) == DOUBLE)	{ | 	if (any2arith(expp2, oper) == DOUBLE)	{ | ||||||
| 		expr_error(*expp2, | 		expr_error(*expp2, | ||||||
| 			"illegal combination of float and pointer"); | 			"illegal combination of float and pointer"); | ||||||
| 		erroneous2int(expp2); | 		erroneous2int(expp2); | ||||||
| 	} | 	} | ||||||
|  | #endif NOFLOAT | ||||||
| 	ch7bin( expp2, '*', | 	ch7bin( expp2, '*', | ||||||
| 		intexpr(size_of_type((*expp1)->ex_type->tp_up, "object"), | 		intexpr(size_of_type((*expp1)->ex_type->tp_up, "object"), | ||||||
| 			pa_type->tp_fund) | 			pa_type->tp_fund) | ||||||
|  |  | ||||||
|  | @ -88,6 +88,7 @@ ch7mon(oper, expp) | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| 	case '~': | 	case '~': | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	{ | 	{ | ||||||
| 		int fund = (*expp)->ex_type->tp_fund; | 		int fund = (*expp)->ex_type->tp_fund; | ||||||
| 
 | 
 | ||||||
|  | @ -102,6 +103,7 @@ ch7mon(oper, expp) | ||||||
| 		} | 		} | ||||||
| 		/* FALLTHROUGH */ | 		/* FALLTHROUGH */ | ||||||
| 	} | 	} | ||||||
|  | #endif NOFLOAT | ||||||
| 	case '-': | 	case '-': | ||||||
| 		any2arith(expp, oper); | 		any2arith(expp, oper); | ||||||
| 		if (is_cp_cst(*expp))	{ | 		if (is_cp_cst(*expp))	{ | ||||||
|  | @ -114,9 +116,11 @@ ch7mon(oper, expp) | ||||||
| 			  ); | 			  ); | ||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
|  | #ifndef NOFLOAT | ||||||
| 		if (is_fp_cst(*expp)) | 		if (is_fp_cst(*expp)) | ||||||
| 			switch_sign_fp(*expp); | 			switch_sign_fp(*expp); | ||||||
| 		else | 		else | ||||||
|  | #endif NOFLOAT | ||||||
| 			*expp = new_oper((*expp)->ex_type, | 			*expp = new_oper((*expp)->ex_type, | ||||||
| 					NILEXPR, oper, *expp); | 					NILEXPR, oper, *expp); | ||||||
| 		break; | 		break; | ||||||
|  |  | ||||||
|  | @ -32,7 +32,9 @@ | ||||||
| static struct stmt_block *stmt_stack; | static struct stmt_block *stmt_stack; | ||||||
| 
 | 
 | ||||||
| char *symbol2str(); | char *symbol2str(); | ||||||
|  | #ifndef NOFLOAT | ||||||
| int fp_used; | int fp_used; | ||||||
|  | #endif NOFLOAT | ||||||
| label lab_count = 1; | label lab_count = 1; | ||||||
| label datlab_count = 1; | label datlab_count = 1; | ||||||
| 
 | 
 | ||||||
|  | @ -254,11 +256,13 @@ end_proc(fbytes, nbytes) | ||||||
| 		else | 		else | ||||||
| 			C_ret(ATW(func_tp->tp_size)); | 			C_ret(ATW(func_tp->tp_size)); | ||||||
| 	} | 	} | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	if (fp_used && mes_flt_given == 0)	{ | 	if (fp_used && mes_flt_given == 0)	{ | ||||||
| 		/* floating point used	*/ | 		/* floating point used	*/ | ||||||
| 		C_ms_flt(); | 		C_ms_flt(); | ||||||
| 		mes_flt_given++; | 		mes_flt_given++; | ||||||
| 	} | 	} | ||||||
|  | #endif NOFLOAT | ||||||
| 	C_ms_par(fbytes);		/* # bytes for formals		*/ | 	C_ms_par(fbytes);		/* # bytes for formals		*/ | ||||||
| 	if (sp_occurred[SP_SETJMP]) {	/* indicate use of "setjmp"	*/ | 	if (sp_occurred[SP_SETJMP]) {	/* indicate use of "setjmp"	*/ | ||||||
| 		C_ms_gto(); | 		C_ms_gto(); | ||||||
|  |  | ||||||
|  | @ -9,7 +9,9 @@ | ||||||
| 
 | 
 | ||||||
| #define	T_SIGNED		1 | #define	T_SIGNED		1 | ||||||
| #define	T_UNSIGNED		2 | #define	T_UNSIGNED		2 | ||||||
|  | #ifndef NOFLOAT | ||||||
| #define	T_FLOATING		3 | #define	T_FLOATING		3 | ||||||
|  | #endif NOFLOAT | ||||||
| 
 | 
 | ||||||
| /*	conversion() generates the EM code for a conversion between
 | /*	conversion() generates the EM code for a conversion between
 | ||||||
| 	the types char, short, int, long, float, double and pointer. | 	the types char, short, int, long, float, double and pointer. | ||||||
|  | @ -51,11 +53,13 @@ conversion(from_type, to_type) | ||||||
| 			C_ciu(); | 			C_ciu(); | ||||||
| 			break; | 			break; | ||||||
| 
 | 
 | ||||||
|  | #ifndef NOFLOAT | ||||||
| 		case T_FLOATING: | 		case T_FLOATING: | ||||||
| 			C_loc(from_size < word_size ? word_size : from_size); | 			C_loc(from_size < word_size ? word_size : from_size); | ||||||
| 			C_loc(to_size < word_size ? word_size : to_size); | 			C_loc(to_size < word_size ? word_size : to_size); | ||||||
| 			C_cif(); | 			C_cif(); | ||||||
| 			break; | 			break; | ||||||
|  | #endif NOFLOAT | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| 
 | 
 | ||||||
|  | @ -73,12 +77,15 @@ conversion(from_type, to_type) | ||||||
| 			C_cuu(); | 			C_cuu(); | ||||||
| 			break; | 			break; | ||||||
| 
 | 
 | ||||||
|  | #ifndef NOFLOAT | ||||||
| 		case T_FLOATING: | 		case T_FLOATING: | ||||||
| 			C_cuf(); | 			C_cuf(); | ||||||
| 			break; | 			break; | ||||||
|  | #endif NOFLOAT | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| 
 | 
 | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	case T_FLOATING: | 	case T_FLOATING: | ||||||
| 		C_loc(from_size < word_size ? word_size : from_size); | 		C_loc(from_size < word_size ? word_size : from_size); | ||||||
| 		C_loc(to_size < word_size ? word_size : to_size); | 		C_loc(to_size < word_size ? word_size : to_size); | ||||||
|  | @ -98,6 +105,7 @@ conversion(from_type, to_type) | ||||||
| 			break; | 			break; | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
|  | #endif NOFLOAT | ||||||
| 	default: | 	default: | ||||||
| 		crash("(conversion) illegal type conversion"); | 		crash("(conversion) illegal type conversion"); | ||||||
| 	} | 	} | ||||||
|  | @ -120,9 +128,11 @@ fundamental(tp) | ||||||
| 	case ENUM: | 	case ENUM: | ||||||
| 		return tp->tp_unsigned ? T_UNSIGNED : T_SIGNED; | 		return tp->tp_unsigned ? T_UNSIGNED : T_SIGNED; | ||||||
| 
 | 
 | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	case FLOAT: | 	case FLOAT: | ||||||
| 	case DOUBLE: | 	case DOUBLE: | ||||||
| 		return T_FLOATING; | 		return T_FLOATING; | ||||||
|  | #endif NOFLOAT | ||||||
| 
 | 
 | ||||||
| 	case POINTER:	/* pointer : signed / unsigned	???	*/ | 	case POINTER:	/* pointer : signed / unsigned	???	*/ | ||||||
| 		return T_SIGNED; | 		return T_SIGNED; | ||||||
|  |  | ||||||
|  | @ -52,15 +52,19 @@ do_decspecs(ds) | ||||||
| 	case SHORT: | 	case SHORT: | ||||||
| 		if (tp == int_type) | 		if (tp == int_type) | ||||||
| 			tp = short_type; | 			tp = short_type; | ||||||
| 		else	error("short with illegal type"); | 		else | ||||||
|  | 			error("short with illegal type"); | ||||||
| 		break; | 		break; | ||||||
| 	case LONG: | 	case LONG: | ||||||
| 		if (tp == int_type) | 		if (tp == int_type) | ||||||
| 			tp = long_type; | 			tp = long_type; | ||||||
| 		else | 		else | ||||||
|  | #ifndef NOFLOAT | ||||||
| 		if (tp == float_type) | 		if (tp == float_type) | ||||||
| 			tp = double_type; | 			tp = double_type; | ||||||
| 		else	error("long with illegal type"); | 		else | ||||||
|  | #endif NOFLOAT | ||||||
|  | 			error("long with illegal type"); | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
| 	if (ds->ds_unsigned)	{ | 	if (ds->ds_unsigned)	{ | ||||||
|  |  | ||||||
|  | @ -327,7 +327,9 @@ p1_expr(lvl, expr) | ||||||
| 		expr->ex_depth, | 		expr->ex_depth, | ||||||
| 		expr->ex_class == Value ? "Value" : | 		expr->ex_class == Value ? "Value" : | ||||||
| 		expr->ex_class == String ? "String" : | 		expr->ex_class == String ? "String" : | ||||||
|  | #ifndef NOFLOAT | ||||||
| 		expr->ex_class == Float ? "Float" : | 		expr->ex_class == Float ? "Float" : | ||||||
|  | #endif NOFLOAT | ||||||
| 		expr->ex_class == Oper ? "Oper" : | 		expr->ex_class == Oper ? "Oper" : | ||||||
| 		expr->ex_class == Type ? "Type" : "UNKNOWN CLASS" | 		expr->ex_class == Type ? "Type" : "UNKNOWN CLASS" | ||||||
| 	); | 	); | ||||||
|  | @ -361,9 +363,11 @@ p1_expr(lvl, expr) | ||||||
| 		); | 		); | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	case Float: | 	case Float: | ||||||
| 		print("%s\n", expr->FL_VALUE); | 		print("%s\n", expr->FL_VALUE); | ||||||
| 		break; | 		break; | ||||||
|  | #endif NOFLOAT | ||||||
| 	case Oper: | 	case Oper: | ||||||
| 		o = &expr->ex_object.ex_oper; | 		o = &expr->ex_object.ex_oper; | ||||||
| 		print("\n"); | 		print("\n"); | ||||||
|  |  | ||||||
|  | @ -91,6 +91,7 @@ EVAL(expr, val, code, true_label, false_label) | ||||||
| 			C_lae_dlb(expr->VL_LBL, expr->VL_VALUE); | 			C_lae_dlb(expr->VL_LBL, expr->VL_VALUE); | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	case Float:	/* a floating constant	*/ | 	case Float:	/* a floating constant	*/ | ||||||
| 		if (gencode) { | 		if (gencode) { | ||||||
| 			label datlab = data_label(); | 			label datlab = data_label(); | ||||||
|  | @ -101,6 +102,7 @@ EVAL(expr, val, code, true_label, false_label) | ||||||
| 			C_loi(expr->ex_type->tp_size); | 			C_loi(expr->ex_type->tp_size); | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
|  | #endif NOFLOAT | ||||||
| 	case Oper:	/* compound expression	*/ | 	case Oper:	/* compound expression	*/ | ||||||
| 	{ | 	{ | ||||||
| 		register int oper = expr->OP_OPER; | 		register int oper = expr->OP_OPER; | ||||||
|  | @ -131,9 +133,11 @@ EVAL(expr, val, code, true_label, false_label) | ||||||
| 				case POINTER: | 				case POINTER: | ||||||
| 					C_ads(rightop->ex_type->tp_size); | 					C_ads(rightop->ex_type->tp_size); | ||||||
| 					break; | 					break; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 				case DOUBLE: | 				case DOUBLE: | ||||||
| 					C_adf(tp->tp_size); | 					C_adf(tp->tp_size); | ||||||
| 					break; | 					break; | ||||||
|  | #endif NOFLOAT | ||||||
| 				default: | 				default: | ||||||
| 					crash("bad type +"); | 					crash("bad type +"); | ||||||
| 				} | 				} | ||||||
|  | @ -144,14 +148,16 @@ EVAL(expr, val, code, true_label, false_label) | ||||||
| 				EVAL(rightop, RVAL, code, NO_LABEL, NO_LABEL); | 				EVAL(rightop, RVAL, code, NO_LABEL, NO_LABEL); | ||||||
| 				if (gencode) { | 				if (gencode) { | ||||||
| 					switch (tp->tp_fund)	{ | 					switch (tp->tp_fund)	{ | ||||||
| 					case DOUBLE: |  | ||||||
| 						C_ngf(tp->tp_size); |  | ||||||
| 						break; |  | ||||||
| 					case INT: | 					case INT: | ||||||
| 					case LONG: | 					case LONG: | ||||||
| 					case POINTER: | 					case POINTER: | ||||||
| 						C_ngi(tp->tp_size); | 						C_ngi(tp->tp_size); | ||||||
| 						break; | 						break; | ||||||
|  | #ifndef NOFLOAT | ||||||
|  | 					case DOUBLE: | ||||||
|  | 						C_ngf(tp->tp_size); | ||||||
|  | 						break; | ||||||
|  | #endif NOFLOAT | ||||||
| 					default: | 					default: | ||||||
| 						CRASH(); | 						CRASH(); | ||||||
| 					} | 					} | ||||||
|  | @ -183,9 +189,11 @@ EVAL(expr, val, code, true_label, false_label) | ||||||
| 					C_ads(rightop->ex_type->tp_size); | 					C_ads(rightop->ex_type->tp_size); | ||||||
| 				} | 				} | ||||||
| 				break; | 				break; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 			case DOUBLE: | 			case DOUBLE: | ||||||
| 				C_sbf(tp->tp_size); | 				C_sbf(tp->tp_size); | ||||||
| 				break; | 				break; | ||||||
|  | #endif NOFLOAT | ||||||
| 			default: | 			default: | ||||||
| 				crash("bad type -"); | 				crash("bad type -"); | ||||||
| 			} | 			} | ||||||
|  | @ -206,9 +214,11 @@ EVAL(expr, val, code, true_label, false_label) | ||||||
| 						else | 						else | ||||||
| 							C_mli(tp->tp_size); | 							C_mli(tp->tp_size); | ||||||
| 						break; | 						break; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 					case DOUBLE: | 					case DOUBLE: | ||||||
| 						C_mlf(double_size); | 						C_mlf(double_size); | ||||||
| 						break; | 						break; | ||||||
|  | #endif NOFLOAT | ||||||
| 					default: | 					default: | ||||||
| 						crash("bad type *"); | 						crash("bad type *"); | ||||||
| 					} | 					} | ||||||
|  | @ -227,9 +237,11 @@ EVAL(expr, val, code, true_label, false_label) | ||||||
| 					else | 					else | ||||||
| 						C_dvi(tp->tp_size); | 						C_dvi(tp->tp_size); | ||||||
| 					break; | 					break; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 				case DOUBLE: | 				case DOUBLE: | ||||||
| 					C_dvf(double_size); | 					C_dvf(double_size); | ||||||
| 					break; | 					break; | ||||||
|  | #endif NOFLOAT | ||||||
| 				default: | 				default: | ||||||
| 					crash("bad type /"); | 					crash("bad type /"); | ||||||
| 				} | 				} | ||||||
|  | @ -237,17 +249,13 @@ EVAL(expr, val, code, true_label, false_label) | ||||||
| 		case '%': | 		case '%': | ||||||
| 			EVAL(leftop, RVAL, code, NO_LABEL, NO_LABEL); | 			EVAL(leftop, RVAL, code, NO_LABEL, NO_LABEL); | ||||||
| 			EVAL(rightop, RVAL, code, NO_LABEL, NO_LABEL); | 			EVAL(rightop, RVAL, code, NO_LABEL, NO_LABEL); | ||||||
| 			if (gencode) | 			ASSERT(tp->tp_fund==INT || tp->tp_fund==LONG); | ||||||
| 				if (	tp->tp_fund == INT | 			if (gencode) { | ||||||
| 				||	tp->tp_fund == LONG | 				if (tp->tp_unsigned) | ||||||
| 				)	{ | 					C_rmu(tp->tp_size); | ||||||
| 					if (tp->tp_unsigned) |  | ||||||
| 						C_rmu(tp->tp_size); |  | ||||||
| 					else |  | ||||||
| 						C_rmi(tp->tp_size); |  | ||||||
| 				} |  | ||||||
| 				else | 				else | ||||||
| 					crash("bad type %%"); | 					C_rmi(tp->tp_size); | ||||||
|  | 			} | ||||||
| 			break; | 			break; | ||||||
| 		case LEFT: | 		case LEFT: | ||||||
| 			EVAL(leftop, RVAL, code, NO_LABEL, NO_LABEL); | 			EVAL(leftop, RVAL, code, NO_LABEL, NO_LABEL); | ||||||
|  | @ -287,10 +295,12 @@ EVAL(expr, val, code, true_label, false_label) | ||||||
| 					else | 					else | ||||||
| 						C_cmi(size); | 						C_cmi(size); | ||||||
| 					break; | 					break; | ||||||
| 				case FLOAT: | #ifndef NOFLOAT | ||||||
|  | 				case FLOAT: /* thought they were converted??? */ | ||||||
| 				case DOUBLE: | 				case DOUBLE: | ||||||
| 					C_cmf(size); | 					C_cmf(size); | ||||||
| 					break; | 					break; | ||||||
|  | #endif NOFLOAT | ||||||
| 				case POINTER: | 				case POINTER: | ||||||
| 					C_cmp(); | 					C_cmp(); | ||||||
| 					break; | 					break; | ||||||
|  | @ -553,12 +563,10 @@ EVAL(expr, val, code, true_label, false_label) | ||||||
| 
 | 
 | ||||||
| 			EVAL(leftop, RVAL, TRUE, l_true, l_false); | 			EVAL(leftop, RVAL, TRUE, l_true, l_false); | ||||||
| 			C_df_ilb(l_true); | 			C_df_ilb(l_true); | ||||||
| 			EVAL(rightop->OP_LEFT, RVAL, code, | 			EVAL(rightop->OP_LEFT, RVAL, code, NO_LABEL, NO_LABEL); | ||||||
| 						NO_LABEL, NO_LABEL); |  | ||||||
| 			C_bra(l_end); | 			C_bra(l_end); | ||||||
| 			C_df_ilb(l_false); | 			C_df_ilb(l_false); | ||||||
| 			EVAL(rightop->OP_RIGHT, RVAL, code, | 			EVAL(rightop->OP_RIGHT, RVAL, code, NO_LABEL, NO_LABEL); | ||||||
| 						NO_LABEL, NO_LABEL); |  | ||||||
| 			C_df_ilb(l_end); | 			C_df_ilb(l_end); | ||||||
| 			break; | 			break; | ||||||
| 		} | 		} | ||||||
|  | @ -655,9 +663,11 @@ EVAL(expr, val, code, true_label, false_label) | ||||||
| 								true_label); | 								true_label); | ||||||
| 			break; | 			break; | ||||||
| 		case INT2INT: | 		case INT2INT: | ||||||
|  | #ifndef NOFLOAT | ||||||
| 		case INT2FLOAT: | 		case INT2FLOAT: | ||||||
| 		case FLOAT2INT: | 		case FLOAT2INT: | ||||||
| 		case FLOAT2FLOAT: | 		case FLOAT2FLOAT: | ||||||
|  | #endif NOFLOAT | ||||||
| 			EVAL(rightop, RVAL, code, NO_LABEL, NO_LABEL); | 			EVAL(rightop, RVAL, code, NO_LABEL, NO_LABEL); | ||||||
| 			if (gencode) | 			if (gencode) | ||||||
| 				conversion(rightop->ex_type, leftop->ex_type); | 				conversion(rightop->ex_type, leftop->ex_type); | ||||||
|  | @ -784,6 +794,7 @@ assop(type, oper) | ||||||
| 			break; | 			break; | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	case FLOAT: | 	case FLOAT: | ||||||
| 	case DOUBLE: | 	case DOUBLE: | ||||||
| 		switch (oper)	{ | 		switch (oper)	{ | ||||||
|  | @ -805,6 +816,7 @@ assop(type, oper) | ||||||
| 			break; | 			break; | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
|  | #endif NOFLOAT | ||||||
| 	case POINTER: | 	case POINTER: | ||||||
| 		if (oper == MINAB || oper == MINMIN || oper == POSTDECR) | 		if (oper == MINAB || oper == MINMIN || oper == POSTDECR) | ||||||
| 			C_ngi(size); | 			C_ngi(size); | ||||||
|  |  | ||||||
|  | @ -134,9 +134,11 @@ dot2expr(expp) | ||||||
| 	case INTEGER: | 	case INTEGER: | ||||||
| 		int2expr(*expp); | 		int2expr(*expp); | ||||||
| 		break; | 		break; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	case FLOATING: | 	case FLOATING: | ||||||
| 		float2expr(*expp); | 		float2expr(*expp); | ||||||
| 		break; | 		break; | ||||||
|  | #endif NOFLOAT | ||||||
| 	default: | 	default: | ||||||
| 		crash("bad conversion to expression"); | 		crash("bad conversion to expression"); | ||||||
| 		break; | 		break; | ||||||
|  | @ -224,6 +226,7 @@ int2expr(expr) | ||||||
| 	fill_int_expr(expr, dot.tk_ival, dot.tk_fund); | 	fill_int_expr(expr, dot.tk_ival, dot.tk_fund); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #ifndef NOFLOAT | ||||||
| float2expr(expr) | float2expr(expr) | ||||||
| 	struct expr *expr; | 	struct expr *expr; | ||||||
| { | { | ||||||
|  | @ -235,6 +238,7 @@ float2expr(expr) | ||||||
| 	expr->FL_VALUE = dot.tk_fval; | 	expr->FL_VALUE = dot.tk_fval; | ||||||
| 	expr->FL_DATLAB = 0; | 	expr->FL_DATLAB = 0; | ||||||
| } | } | ||||||
|  | #endif NOFLOAT | ||||||
| 
 | 
 | ||||||
| struct expr* | struct expr* | ||||||
| intexpr(ivalue, fund) | intexpr(ivalue, fund) | ||||||
|  | @ -408,10 +412,8 @@ chk_cst_expr(expp) | ||||||
| 			expr_warning(expr, | 			expr_warning(expr, | ||||||
| 				"expression comma in constant expression"); | 				"expression comma in constant expression"); | ||||||
| 	} | 	} | ||||||
| 	 | 	if (err) | ||||||
| 	if (err) { |  | ||||||
| 		erroneous2int(expp); | 		erroneous2int(expp); | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| init_expression(eppp, expr) | init_expression(eppp, expr) | ||||||
|  | @ -453,6 +455,7 @@ is_cp_cst(expr) | ||||||
| 	return is_ld_cst(expr) && expr->VL_CLASS == Const; | 	return is_ld_cst(expr) && expr->VL_CLASS == Const; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #ifndef NOFLOAT | ||||||
| int | int | ||||||
| is_fp_cst(expr) | is_fp_cst(expr) | ||||||
| 	register struct expr *expr; | 	register struct expr *expr; | ||||||
|  | @ -462,6 +465,7 @@ is_fp_cst(expr) | ||||||
| 	*/ | 	*/ | ||||||
| 	return expr->ex_class == Float; | 	return expr->ex_class == Float; | ||||||
| } | } | ||||||
|  | #endif NOFLOAT | ||||||
| 
 | 
 | ||||||
| free_expression(expr) | free_expression(expr) | ||||||
| 	struct expr *expr; | 	struct expr *expr; | ||||||
|  |  | ||||||
|  | @ -25,10 +25,12 @@ struct string	{ | ||||||
| 	label sg_datlab;	/* global data-label			*/ | 	label sg_datlab;	/* global data-label			*/ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | #ifndef NOFLOAT | ||||||
| struct floating	{ | struct floating	{ | ||||||
| 	char *fl_value;		/* pointer to string repr. the fp const. */ | 	char *fl_value;		/* pointer to string repr. the fp const. */ | ||||||
| 	label fl_datlab;	/* global data_label	*/ | 	label fl_datlab;	/* global data_label	*/ | ||||||
| }; | }; | ||||||
|  | #endif NOFLOAT | ||||||
| 
 | 
 | ||||||
| struct oper	{ | struct oper	{ | ||||||
| 	struct type *op_type;	/* resulting type of the operation	*/ | 	struct type *op_type;	/* resulting type of the operation	*/ | ||||||
|  | @ -40,7 +42,9 @@ struct oper	{ | ||||||
| /* The following constants indicate the class of the expression: */ | /* The following constants indicate the class of the expression: */ | ||||||
| #define	Value	0		/* it is a value known at load time */ | #define	Value	0		/* it is a value known at load time */ | ||||||
| #define	String	1		/* it is a string constant  */ | #define	String	1		/* it is a string constant  */ | ||||||
|  | #ifndef NOFLOAT | ||||||
| #define	Float	2		/* it is a floating point constant	*/ | #define	Float	2		/* it is a floating point constant	*/ | ||||||
|  | #endif NOFLOAT | ||||||
| #define	Oper	3		/* it is a run-time expression */ | #define	Oper	3		/* it is a run-time expression */ | ||||||
| #define	Type	4		/* only its type is relevant */ | #define	Type	4		/* only its type is relevant */ | ||||||
| 
 | 
 | ||||||
|  | @ -56,7 +60,9 @@ struct expr	{ | ||||||
| 	union	{ | 	union	{ | ||||||
| 		struct value ex_value; | 		struct value ex_value; | ||||||
| 		struct string ex_string; | 		struct string ex_string; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 		struct floating ex_float; | 		struct floating ex_float; | ||||||
|  | #endif NOFLOAT | ||||||
| 		struct oper ex_oper; | 		struct oper ex_oper; | ||||||
| 	} ex_object; | 	} ex_object; | ||||||
| }; | }; | ||||||
|  | @ -69,8 +75,10 @@ struct expr	{ | ||||||
| #define	SG_VALUE	ex_object.ex_string.sg_value | #define	SG_VALUE	ex_object.ex_string.sg_value | ||||||
| #define SG_LEN		ex_object.ex_string.sg_len | #define SG_LEN		ex_object.ex_string.sg_len | ||||||
| #define	SG_DATLAB	ex_object.ex_string.sg_datlab | #define	SG_DATLAB	ex_object.ex_string.sg_datlab | ||||||
|  | #ifndef NOFLOAT | ||||||
| #define	FL_VALUE	ex_object.ex_float.fl_value | #define	FL_VALUE	ex_object.ex_float.fl_value | ||||||
| #define	FL_DATLAB	ex_object.ex_float.fl_datlab | #define	FL_DATLAB	ex_object.ex_float.fl_datlab | ||||||
|  | #endif NOFLOAT | ||||||
| #define	OP_TYPE		ex_object.ex_oper.op_type | #define	OP_TYPE		ex_object.ex_oper.op_type | ||||||
| #define	OP_LEFT		ex_object.ex_oper.op_left | #define	OP_LEFT		ex_object.ex_oper.op_left | ||||||
| #define	OP_OPER		ex_object.ex_oper.op_oper | #define	OP_OPER		ex_object.ex_oper.op_oper | ||||||
|  |  | ||||||
|  | @ -210,9 +210,11 @@ declare_idf(ds, dc, lvl) | ||||||
| 			type = construct_type(POINTER, type->tp_up, (arith)0); | 			type = construct_type(POINTER, type->tp_up, (arith)0); | ||||||
| 			formal_array = 1; | 			formal_array = 1; | ||||||
| 			break; | 			break; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 		case FLOAT:	/* RM 10.1	*/ | 		case FLOAT:	/* RM 10.1	*/ | ||||||
| 			type = double_type; | 			type = double_type; | ||||||
| 			break; | 			break; | ||||||
|  | #endif NOFLOAT | ||||||
| 		case CHAR: | 		case CHAR: | ||||||
| 		case SHORT: | 		case SHORT: | ||||||
| 			/*	The RM is not clear about this: we must
 | 			/*	The RM is not clear about this: we must
 | ||||||
|  |  | ||||||
|  | @ -383,10 +383,12 @@ pad(tp) | ||||||
| 	case POINTER: | 	case POINTER: | ||||||
| 		C_con_ucon("0",  tp->tp_size); | 		C_con_ucon("0",  tp->tp_size); | ||||||
| 		break; | 		break; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	case FLOAT: | 	case FLOAT: | ||||||
| 	case DOUBLE: | 	case DOUBLE: | ||||||
| 		C_con_fcon("0", tp->tp_size); | 		C_con_fcon("0", tp->tp_size); | ||||||
| 		break; | 		break; | ||||||
|  | #endif NOFLOAT | ||||||
| 	case UNION: | 	case UNION: | ||||||
| 		error("initialisation of unions not allowed"); | 		error("initialisation of unions not allowed"); | ||||||
| 		break; | 		break; | ||||||
|  | @ -448,6 +450,7 @@ check_ival(ex, tp) | ||||||
| 			C_con_dlb(ex->VL_LBL, ex->VL_VALUE); | 			C_con_dlb(ex->VL_LBL, ex->VL_VALUE); | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	case FLOAT: | 	case FLOAT: | ||||||
| 	case DOUBLE: | 	case DOUBLE: | ||||||
| 		ch7cast(&ex, '=', tp); | 		ch7cast(&ex, '=', tp); | ||||||
|  | @ -471,6 +474,7 @@ check_ival(ex, tp) | ||||||
| 		else | 		else | ||||||
| 			illegal_init_cst(ex); | 			illegal_init_cst(ex); | ||||||
| 		break; | 		break; | ||||||
|  | #endif NOFLOAT | ||||||
| 
 | 
 | ||||||
| #ifndef NOBITFIELD | #ifndef NOBITFIELD | ||||||
| 	case FIELD: | 	case FIELD: | ||||||
|  |  | ||||||
|  | @ -48,8 +48,10 @@ arith | ||||||
| 	dword_size = (2 * SZ_WORD), | 	dword_size = (2 * SZ_WORD), | ||||||
| 	int_size = SZ_INT, | 	int_size = SZ_INT, | ||||||
| 	long_size = SZ_LONG, | 	long_size = SZ_LONG, | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	float_size = SZ_FLOAT, | 	float_size = SZ_FLOAT, | ||||||
| 	double_size = SZ_DOUBLE, | 	double_size = SZ_DOUBLE, | ||||||
|  | #endif NOFLOAT | ||||||
| 	pointer_size = SZ_POINTER; | 	pointer_size = SZ_POINTER; | ||||||
| 
 | 
 | ||||||
| int | int | ||||||
|  | @ -57,8 +59,10 @@ int | ||||||
| 	word_align = AL_WORD, | 	word_align = AL_WORD, | ||||||
| 	int_align = AL_INT, | 	int_align = AL_INT, | ||||||
| 	long_align = AL_LONG, | 	long_align = AL_LONG, | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	float_align = AL_FLOAT, | 	float_align = AL_FLOAT, | ||||||
| 	double_align = AL_DOUBLE, | 	double_align = AL_DOUBLE, | ||||||
|  | #endif NOFLOAT | ||||||
| 	pointer_align = AL_POINTER, | 	pointer_align = AL_POINTER, | ||||||
| 	struct_align = AL_STRUCT, | 	struct_align = AL_STRUCT, | ||||||
| 	union_align = AL_UNION; | 	union_align = AL_UNION; | ||||||
|  | @ -237,8 +241,10 @@ init() | ||||||
| 	long_type = standard_type(LONG, 0, long_align, long_size); | 	long_type = standard_type(LONG, 0, long_align, long_size); | ||||||
| 	ulong_type = standard_type(LONG, UNSIGNED, long_align, long_size); | 	ulong_type = standard_type(LONG, UNSIGNED, long_align, long_size); | ||||||
| 
 | 
 | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	float_type = standard_type(FLOAT, 0, float_align, float_size); | 	float_type = standard_type(FLOAT, 0, float_align, float_size); | ||||||
| 	double_type = standard_type(DOUBLE, 0, double_align, double_size); | 	double_type = standard_type(DOUBLE, 0, double_align, double_size); | ||||||
|  | #endif NOFLOAT | ||||||
| 	void_type = standard_type(VOID, 0, 0, (arith)0); | 	void_type = standard_type(VOID, 0, 0, (arith)0); | ||||||
| 	label_type = standard_type(LABEL, 0, 0, (arith)0); | 	label_type = standard_type(LABEL, 0, 0, (arith)0); | ||||||
| 	error_type = standard_type(ERRONEOUS, 0, 1, (arith)1); | 	error_type = standard_type(ERRONEOUS, 0, 1, (arith)1); | ||||||
|  | @ -274,8 +280,10 @@ init() | ||||||
| 	/* Define the standard type identifiers. */ | 	/* Define the standard type identifiers. */ | ||||||
| 	add_def(str2idf("char"), TYPEDEF, char_type, L_UNIVERSAL); | 	add_def(str2idf("char"), TYPEDEF, char_type, L_UNIVERSAL); | ||||||
| 	add_def(str2idf("int"), TYPEDEF, int_type, L_UNIVERSAL); | 	add_def(str2idf("int"), TYPEDEF, int_type, L_UNIVERSAL); | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	add_def(str2idf("float"), TYPEDEF, float_type, L_UNIVERSAL); | 	add_def(str2idf("float"), TYPEDEF, float_type, L_UNIVERSAL); | ||||||
| 	add_def(str2idf("double"), TYPEDEF, double_type, L_UNIVERSAL); | 	add_def(str2idf("double"), TYPEDEF, double_type, L_UNIVERSAL); | ||||||
|  | #endif NOFLOAT | ||||||
| 	add_def(str2idf("void"), TYPEDEF, void_type, L_UNIVERSAL); | 	add_def(str2idf("void"), TYPEDEF, void_type, L_UNIVERSAL); | ||||||
| 	stack_level(); | 	stack_level(); | ||||||
| } | } | ||||||
|  | @ -350,9 +358,11 @@ preprocess() | ||||||
| 		case INTEGER: | 		case INTEGER: | ||||||
| 			print("%ld ", dot.tk_ival); | 			print("%ld ", dot.tk_ival); | ||||||
| 			break; | 			break; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 		case FLOATING: | 		case FLOATING: | ||||||
| 			print("%s ", dot.tk_fval); | 			print("%s ", dot.tk_fval); | ||||||
| 			break; | 			break; | ||||||
|  | #endif NOFLOAT | ||||||
| 		case EOI: | 		case EOI: | ||||||
| 		case EOF: | 		case EOF: | ||||||
| 			return; | 			return; | ||||||
|  |  | ||||||
|  | @ -200,16 +200,20 @@ do_option(text) | ||||||
| 					long_align = align; | 					long_align = align; | ||||||
| 				break; | 				break; | ||||||
| 			case 'f':	/* float	*/ | 			case 'f':	/* float	*/ | ||||||
|  | #ifndef NOFLOAT | ||||||
| 				if (size != (arith)0) | 				if (size != (arith)0) | ||||||
| 					float_size = size; | 					float_size = size; | ||||||
| 				if (align != 0) | 				if (align != 0) | ||||||
| 					float_align = align; | 					float_align = align; | ||||||
|  | #endif NOFLOAT | ||||||
| 				break; | 				break; | ||||||
| 			case 'd':	/* double	*/ | 			case 'd':	/* double	*/ | ||||||
|  | #ifndef NOFLOAT | ||||||
| 				if (size != (arith)0) | 				if (size != (arith)0) | ||||||
| 					double_size = size; | 					double_size = size; | ||||||
| 				if (align != 0) | 				if (align != 0) | ||||||
| 					double_align = align; | 					double_align = align; | ||||||
|  | #endif NOFLOAT | ||||||
| 				break; | 				break; | ||||||
| 			case 'p':	/* pointer	*/ | 			case 'p':	/* pointer	*/ | ||||||
| 				if (size != (arith)0) | 				if (size != (arith)0) | ||||||
|  |  | ||||||
|  | @ -3,6 +3,9 @@ | ||||||
| 
 | 
 | ||||||
| extern arith | extern arith | ||||||
| 	short_size, word_size, dword_size, int_size, long_size, | 	short_size, word_size, dword_size, int_size, long_size, | ||||||
| 	float_size, double_size, pointer_size; | #ifndef NOFLOAT | ||||||
|  | 	float_size, double_size, | ||||||
|  | #endif NOFLOAT | ||||||
|  | 	pointer_size; | ||||||
| 
 | 
 | ||||||
| extern arith max_int, max_unsigned;	/* cstoper.c	*/ | extern arith max_int, max_unsigned;	/* cstoper.c	*/ | ||||||
|  |  | ||||||
|  | @ -128,10 +128,12 @@ unstack_level() | ||||||
| 					case POINTER: | 					case POINTER: | ||||||
| 						reg = reg_pointer; | 						reg = reg_pointer; | ||||||
| 						break; | 						break; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 					case FLOAT: | 					case FLOAT: | ||||||
| 					case DOUBLE: | 					case DOUBLE: | ||||||
| 						reg = reg_float; | 						reg = reg_float; | ||||||
| 						break; | 						break; | ||||||
|  | #endif NOFLOAT | ||||||
| 					default: | 					default: | ||||||
| 						reg = reg_any; | 						reg = reg_any; | ||||||
| 						break; | 						break; | ||||||
|  |  | ||||||
|  | @ -49,10 +49,12 @@ code_startswitch(expp) | ||||||
| 			warning("long in switch (cast to int)"); | 			warning("long in switch (cast to int)"); | ||||||
| 		int2int(expp, int_type); | 		int2int(expp, int_type); | ||||||
| 		break; | 		break; | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	case DOUBLE: | 	case DOUBLE: | ||||||
| 		error("float/double in switch"); | 		error("float/double in switch"); | ||||||
| 		erroneous2int(expp); | 		erroneous2int(expp); | ||||||
| 		break; | 		break; | ||||||
|  | #endif NOFLOAT | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	stack_stmt(l_break, NO_LABEL); | 	stack_stmt(l_break, NO_LABEL); | ||||||
|  |  | ||||||
|  | @ -26,7 +26,9 @@ struct type | ||||||
| 	*word_type, *uword_type, | 	*word_type, *uword_type, | ||||||
| 	*int_type, *uint_type, | 	*int_type, *uint_type, | ||||||
| 	*long_type, *ulong_type, | 	*long_type, *ulong_type, | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	*float_type, *double_type, | 	*float_type, *double_type, | ||||||
|  | #endif NOFLOAT | ||||||
| 	*void_type, *label_type, | 	*void_type, *label_type, | ||||||
| 	*string_type, *funint_type, *error_type; | 	*string_type, *funint_type, *error_type; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -33,7 +33,9 @@ extern struct type | ||||||
| 	*word_type, *uword_type, | 	*word_type, *uword_type, | ||||||
| 	*int_type, *uint_type, | 	*int_type, *uint_type, | ||||||
| 	*long_type, *ulong_type, | 	*long_type, *ulong_type, | ||||||
|  | #ifndef NOFLOAT | ||||||
| 	*float_type, *double_type, | 	*float_type, *double_type, | ||||||
|  | #endif NOFLOAT | ||||||
| 	*void_type, *label_type, | 	*void_type, *label_type, | ||||||
| 	*string_type, *funint_type, *error_type; | 	*string_type, *funint_type, *error_type; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue