};
enum riscv_privilege_levels {
- UNKNOWN_MODE, USER_MODE, SUPERVISOR_MODE, MACHINE_MODE, RNMI_MODE
+ UNKNOWN_MODE, SUPERVISOR_MODE, MACHINE_MODE, RNMI_MODE
};
struct GTY(()) mode_switching_info {
error ("attribute 'rnmi' requires the Smrnmi ISA extension");
*no_add_attrs = true;
}
- else if (strcmp (string, "user") && strcmp (string, "supervisor")
- && strcmp (string, "machine") && strcmp (string, "rnmi"))
+ else if (strcmp (string, "supervisor")
+ && strcmp (string, "machine")
+ && strcmp (string, "rnmi"))
{
warning (OPT_Wattributes,
- "argument to %qE attribute is not %<\"user\"%>, %<\"supervisor\"%>, "
+ "argument to %qE attribute is not %<\"supervisor\"%>, "
"%<\"machine\"%>, or %<\"rnmi\"%>", name);
*no_add_attrs = true;
}
if (th_int_mask && TH_INT_INTERRUPT (cfun))
emit_jump_insn (gen_th_int_pop ());
- else if (mode == MACHINE_MODE)
- emit_jump_insn (gen_riscv_mret ());
else if (mode == SUPERVISOR_MODE)
emit_jump_insn (gen_riscv_sret ());
else if (mode == RNMI_MODE)
emit_jump_insn (gen_riscv_mnret ());
- else
- emit_jump_insn (gen_riscv_uret ());
+ else /* Must be MACHINE_MODE. */
+ emit_jump_insn (gen_riscv_mret ());
}
else if (style != SIBCALL_RETURN)
{
{
const char *string = TREE_STRING_POINTER (TREE_VALUE (attr_args));
- if (!strcmp (string, "user"))
- return USER_MODE;
- else if (!strcmp (string, "supervisor"))
+ if (!strcmp (string, "supervisor"))
return SUPERVISOR_MODE;
else if (!strcmp (string, "rnmi"))
return RNMI_MODE;
;; Interrupt handler instructions.
UNSPECV_MRET
UNSPECV_SRET
- UNSPECV_URET
UNSPECV_MNRET
;; Blockage and synchronization.
"sret"
[(set_attr "type" "ret")])
-(define_insn "riscv_uret"
- [(return)
- (unspec_volatile [(const_int 0)] UNSPECV_URET)]
- ""
- "uret"
- [(set_attr "type" "ret")])
-
(define_insn "riscv_mnret"
[(return)
(unspec_volatile [(const_int 0)] UNSPECV_MNRET)]
parameter to the interrupt attribute like this:
@smallexample
-void f (void) __attribute__ ((interrupt ("user")));
+void f (void) __attribute__ ((interrupt ("supervisor")));
@end smallexample
-Permissible values for this parameter are @code{user}, @code{supervisor},
+Permissible values for this parameter are @code{supervisor},
@code{machine}, and @code{rnmi}. If there is no parameter, then it
defaults to @code{machine}.