+ {
+ if (frame_type == RX_FRAME_TYPE_EXCEPTION)
+ {
+ struct value *psw_val;
+ CORE_ADDR psw;
+
+ psw_val = rx_frame_prev_register (this_frame, this_cache,
+ RX_PSW_REGNUM);
+ psw = extract_unsigned_integer
+ (value_contents_all (psw_val).data (), 4,
+ gdbarch_byte_order (get_frame_arch (this_frame)));
+
+ if ((psw & 0x20000 /* U bit */) != 0)
+ return rx_frame_prev_register (this_frame, this_cache,
+ RX_USP_REGNUM);
+
+ /* Fall through for the case where U bit is zero. */
+ }
+
+ return frame_unwind_got_constant (this_frame, regnum, frame_base);
+ }
+
+ if (frame_type == RX_FRAME_TYPE_FAST_INTERRUPT)
+ {
+ if (regnum == RX_PC_REGNUM)
+ return rx_frame_prev_register (this_frame, this_cache,
+ RX_BPC_REGNUM);
+ if (regnum == RX_PSW_REGNUM)
+ return rx_frame_prev_register (this_frame, this_cache,
+ RX_BPSW_REGNUM);
+ }