+#ifdef LISP_FEATURE_LINUX
+ os_restore_fp_control(context);
+#endif
+ code=*((u32 *)(*os_context_pc_addr(context)));
+ if (code == ((3 << 26) | (0x18 << 21) | (reg_NL3 << 16))) {
+ arch_clear_pseudo_atomic_interrupted(context);
+ arch_skip_instruction(context);
+ /* interrupt or GC was requested in PA; now we're done with the
+ PA section we may as well get around to it */
+ interrupt_handle_pending(context);
+ return;
+ }
+
+#ifdef LISP_FEATURE_GENCGC
+ /* Is this an allocation trap? */
+ if (allocation_trap_p(context)) {
+ handle_allocation_trap(context);
+ arch_skip_instruction(context);
+ return;
+ }
+#endif
+
+ if ((code >> 16) == ((3 << 10) | (6 << 5))) {
+ /* twllei reg_ZERO,N will always trap if reg_ZERO = 0 */
+ int trap = code & 0x1f;
+ handle_trap(context,trap);
+ return;
+ }
+ if (((code >> 26) == 3) && (((code >> 21) & 31) == 24)) {
+ interrupt_internal_error(context, 0);
+ return;
+ }
+
+ interrupt_handle_now(signal, (siginfo_t *)code, context);
+}
+
+
+void arch_install_interrupt_handlers()
+{
+ undoably_install_low_level_interrupt_handler(SIGILL, sigtrap_handler);
+ undoably_install_low_level_interrupt_handler(SIGTRAP, sigtrap_handler);