Lines Matching refs:ad
909 struct access_data *ad)
913 ad->address = symbol_pseudo(ep, addr->symbol);
919 ad->offset += get_expression_value(addr->right);
920 return linearize_simple_address(ep, addr->left, ad);
924 ad->address = linearize_expression(ep, addr);
952 struct access_data *ad)
958 ad->type = ctype;
960 return linearize_simple_address(ep, expr->unop, ad);
966 static pseudo_t add_load(struct entrypoint *ep, struct access_data *ad)
974 insn = alloc_typed_instruction(OP_LOAD, ad->btype);
978 insn->offset = ad->offset;
979 insn->is_volatile = ad->type && (ad->type->ctype.modifiers & MOD_VOLATILE);
980 use_pseudo(insn, ad->address, &insn->src);
985 static void add_store(struct entrypoint *ep, struct access_data *ad, pseudo_t value)
993 store = alloc_typed_instruction(OP_STORE, ad->btype);
994 store->offset = ad->offset;
995 store->is_volatile = ad->type && (ad->type->ctype.modifiers & MOD_VOLATILE);
997 use_pseudo(store, ad->address, &store->src);
1022 struct access_data *ad)
1024 struct symbol *ctype = ad->type;
1031 btype = ad->btype = bitfield_base_type(ctype);
1033 pseudo_t orig = add_load(ep, ad);
1036 add_store(ep, ad, store);
1119 static pseudo_t linearize_load_gen(struct entrypoint *ep, struct access_data *ad)
1121 struct symbol *ctype = ad->type;
1128 btype = ad->btype = bitfield_base_type(ctype);
1129 new = add_load(ep, ad);
1137 struct access_data ad = { NULL, };
1140 if (!linearize_address_gen(ep, expr, &ad))
1142 value = linearize_load_gen(ep, &ad);
1148 struct access_data ad = { NULL, };
1152 if (!linearize_address_gen(ep, expr->unop, &ad))
1155 old = linearize_load_gen(ep, &ad);
1161 if (ad.btype != ad.type)
1162 old = cast_pseudo(ep, old, ad.type, ad.btype);
1163 new = add_binary_op(ep, ad.btype, op, old, one);
1164 if (ad.btype != ad.type)
1165 new = cast_pseudo(ep, new, ad.btype, ad.type);
1166 linearize_store_gen(ep, new, &ad);
1452 struct access_data ad = { NULL, };
1459 if (!target || !linearize_address_gen(ep, target, &ad))
1462 pseudo_t oldvalue = linearize_load_gen(ep, &ad);
1488 value = linearize_store_gen(ep, value, &ad);
1838 static pseudo_t linearize_initializer(struct entrypoint *ep, struct expression *initializer, struct access_data *ad)
1844 linearize_initializer(ep, expr, ad);
1849 ad->offset = initializer->init_offset;
1850 linearize_initializer(ep, initializer->init_expr, ad);
1854 ad->type = initializer->ctype;
1855 linearize_store_gen(ep, value, ad);
1865 struct access_data ad = { NULL, };
1867 ad.type = arg;
1868 ad.address = symbol_pseudo(ep, arg);
1869 linearize_store_gen(ep, argument_pseudo(ep, nr), &ad);
1954 struct access_data ad = { NULL, };
1965 ad.address = symbol_pseudo(ep, sym);
1973 ad.type = sym;
1974 ad.address = symbol_pseudo(ep, sym);
1975 linearize_store_gen(ep, value_pseudo(0), &ad);
1978 value = linearize_initializer(ep, sym->initializer, &ad);
2116 struct access_data ad = { NULL, };
2122 if (!linearize_address_gen(ep, op->expr, &ad))
2125 linearize_store_gen(ep, pseudo, &ad);