From 0539581d5dc265956877f9b7fdb01ec01f51d445 Mon Sep 17 00:00:00 2001 From: ceriel Date: Fri, 1 Feb 1991 09:54:21 +0000 Subject: [PATCH] Generate less stupid conversions --- lang/cem/cemcom.ansi/eval.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/lang/cem/cemcom.ansi/eval.c b/lang/cem/cemcom.ansi/eval.c index 944492b7d..8993fdc0e 100644 --- a/lang/cem/cemcom.ansi/eval.c +++ b/lang/cem/cemcom.ansi/eval.c @@ -135,10 +135,7 @@ EVAL(expr, val, code, true_label, false_label) C_adi(tp->tp_size); break; case POINTER: - C_loc(right->ex_type->tp_size); - C_loc(pointer_size); - C_cuu(); - C_ads(pointer_size); + ptr_add(right->ex_type->tp_size); break; case FLOAT: case DOUBLE: @@ -191,10 +188,7 @@ EVAL(expr, val, code, true_label, false_label) C_sbs(pointer_size); else { C_ngi(right->ex_type->tp_size); - C_loc(right->ex_type->tp_size); - C_loc(pointer_size); - C_cuu(); - C_ads(pointer_size); + ptr_add(right->ex_type->tp_size); } break; case FLOAT: @@ -805,16 +799,24 @@ assop(type, oper) case POINTER: if (oper == MINAB || oper == MINMIN || oper == POSTDECR) C_ngi(size); - C_loc(size); - C_loc(pointer_size); - C_cuu(); - C_ads(pointer_size); + ptr_add(size); break; default: crash("(assop) bad type %s\n", symbol2str(type->tp_fund)); } } +ptr_add(size) + arith size; +{ + if (size != pointer_size) { + C_loc(size); + C_loc(pointer_size); + C_cuu(); + } + C_ads(pointer_size); +} + /* store_val() generates code for a store operation. There are four ways of storing data: - into a global variable -- 2.34.1