Lines Matching refs:expr

45 static int show_string_expr(struct expression *expr);
550 struct expression *expr = case_stmt->case_expression;
553 if (!expr) {
556 if (expr->type == EXPR_VALUE) {
557 printf(" case %lld", expr->value);
744 static int show_call_expression(struct expression *expr)
751 if (!expr->ctype) {
752 warning(expr->pos, "\tcall with no type!");
757 FOR_EACH_PTR_REVERSE(expr->args, arg) {
764 fn = expr->fn;
785 printf("\tmov.%d\t\tv%d,retval\n", expr->ctype->bit_size, retval);
789 static int show_comma(struct expression *expr)
791 show_expression(expr->left);
792 return show_expression(expr->right);
795 static int show_binop(struct expression *expr)
797 int left = show_expression(expr->left);
798 int right = show_expression(expr->right);
807 unsigned int op = expr->op;
813 expr->ctype->bit_size,
818 static int show_slice(struct expression *expr)
820 int target = show_expression(expr->base);
822 printf("\tslice.%d\t\tv%d,v%d,%d\n", expr->ctype->bit_size, target, new, expr->r_bitpos);
826 static int show_regular_preop(struct expression *expr)
828 int target = show_expression(expr->unop);
834 unsigned int op = expr->op;
840 printf("\t%s.%d\t\tv%d,v%d\n", opname, expr->ctype->bit_size, new, target);
848 static int show_address_gen(struct expression *expr)
850 return show_expression(expr->unop);
853 static int show_load_gen(int bits, struct expression *expr, int addr)
861 static void show_store_gen(int bits, int value, struct expression *expr, int addr)
867 static int show_assignment(struct expression *expr)
869 struct expression *target = expr->left;
872 if (!expr->ctype)
875 bits = expr->ctype->bit_size;
876 val = show_expression(expr->right);
884 struct expression *expr = stmt->ret_value;
887 if (expr && expr->ctype) {
888 int val = show_expression(expr);
889 int bits = expr->ctype->bit_size;
897 static int show_initialization(struct symbol *sym, struct expression *expr)
901 if (!expr->ctype)
904 bits = expr->ctype->bit_size;
905 val = show_expression(expr);
913 static int show_access(struct expression *expr)
915 int addr = show_address_gen(expr);
916 return show_load_gen(expr->ctype->bit_size, expr, addr);
919 static int show_inc_dec(struct expression *expr, int postop)
921 int addr = show_address_gen(expr->unop);
923 const char *opname = expr->op == SPECIAL_INCREMENT ? "add" : "sub";
924 int bits = expr->ctype->bit_size;
926 retval = show_load_gen(bits, expr->unop, addr);
931 show_store_gen(bits, new, expr->unop, addr);
935 static int show_preop(struct expression *expr)
942 if (expr->op == '*')
943 return show_access(expr);
944 if (expr->op == SPECIAL_INCREMENT || expr->op == SPECIAL_DECREMENT)
945 return show_inc_dec(expr, 0);
946 return show_regular_preop(expr);
949 static int show_postop(struct expression *expr)
951 return show_inc_dec(expr, 1);
975 struct expression *expr = sym->initializer;
977 if (expr) {
980 bits = expr->ctype->bit_size;
981 val = show_expression(expr);
988 static int show_cast_expr(struct expression *expr)
991 int op = show_expression(expr->cast_expression);
995 old_type = expr->cast_expression->ctype;
996 new_type = expr->cast_type;
1012 static int show_value(struct expression *expr)
1015 unsigned long long value = expr->value;
1017 printf("\tmovi.%d\t\tv%d,$%llu\n", expr->ctype->bit_size, new, value);
1021 static int show_fvalue(struct expression *expr)
1024 long double value = expr->fvalue;
1026 printf("\tmovf.%d\t\tv%d,$%Le\n", expr->ctype->bit_size, new, value);
1030 static int show_string_expr(struct expression *expr)
1034 printf("\tmovi.%d\t\tv%d,&%s\n", bits_in_pointer, new, show_string(expr->string));
1038 static int show_label_expr(struct expression *expr)
1041 printf("\tmovi.%d\t\tv%d,.L%p\n",bits_in_pointer, new, expr->label_symbol);
1045 static int show_conditional_expr(struct expression *expr)
1047 int cond = show_expression(expr->conditional);
1048 int valt = show_expression(expr->cond_true);
1049 int valf = show_expression(expr->cond_false);
1052 printf("[v%d]\tcmov.%d\t\tv%d,v%d,v%d\n", cond, expr->ctype->bit_size, new, valt, valf);
1056 static int show_statement_expr(struct expression *expr)
1058 return show_statement(expr->statement);
1061 static int show_position_expr(struct expression *expr, struct symbol *base)
1063 int new = show_expression(expr->init_expr);
1064 struct symbol *ctype = expr->init_expr->ctype;
1070 expr->init_offset, bit_offset,
1075 static int show_initializer_expr(struct expression *expr, struct symbol *ctype)
1079 FOR_EACH_PTR(expr->expr_list, entry) {
1113 struct expression *expr = sym->initializer;
1115 if (expr)
1116 show_expression(expr);
1124 int show_expression(struct expression *expr)
1126 if (!expr)
1129 if (!expr->ctype) {
1130 struct position *pos = &expr->pos;
1137 switch (expr->type) {
1139 return show_call_expression(expr);
1142 return show_assignment(expr);
1145 return show_comma(expr);
1149 return show_binop(expr);
1151 return show_preop(expr);
1153 return show_postop(expr);
1155 return show_symbol_expr(expr->symbol);
1161 warning(expr->pos, "invalid expression after evaluation");
1166 return show_cast_expr(expr);
1168 return show_value(expr);
1170 return show_fvalue(expr);
1172 return show_string_expr(expr);
1174 return show_initializer_expr(expr, expr->ctype);
1177 return show_conditional_expr(expr);
1179 return show_statement_expr(expr);
1181 return show_label_expr(expr);
1183 return show_slice(expr);
1188 warning(expr->pos, "unable to show plain initializer position expression");
1191 warning(expr->pos, "unable to show identifier expression");
1194 warning(expr->pos, "unable to show index expression");
1197 warning(expr->pos, "unable to show type expression");
1200 warning(expr->pos, "unable to show generic expression");