+
+void sparc_cconv_init(void)
+{
+ for (size_t i = 0; i < ARRAY_SIZE(caller_saves); ++i) {
+ rbitset_set(default_caller_saves, caller_saves[i]);
+ }
+
+ rbitset_set_all(default_returns_twice_saves, N_SPARC_REGISTERS);
+ for (size_t i = 0; i < ARRAY_SIZE(returns_twice_saved); ++i) {
+ rbitset_clear(default_returns_twice_saves, returns_twice_saved[i]);
+ }
+ for (size_t i = 0; i < ARRAY_SIZE(ignore_regs); ++i) {
+ rbitset_clear(default_returns_twice_saves, ignore_regs[i]);
+ }
+
+ for (size_t i = 0; i < ARRAY_SIZE(float_result_reqs_double); i += 2) {
+ arch_register_req_t *req = &float_result_reqs_double[i];
+ *req = *float_result_regs[i]->single_req;
+ req->type |= arch_register_req_type_aligned;
+ req->width = 2;
+ }
+ for (size_t i = 0; i < ARRAY_SIZE(float_result_reqs_quad); i += 4) {
+ arch_register_req_t *req = &float_result_reqs_quad[i];
+ *req = *float_result_regs[i]->single_req;
+ req->type |= arch_register_req_type_aligned;
+ req->width = 4;
+ }
+}