From dd4acb6f11f0c614ee79857e093b3ec6a11a8965 Mon Sep 17 00:00:00 2001 From: Chris Hanson Date: Tue, 12 Jan 1993 10:43:22 +0000 Subject: [PATCH] Add assembly hook to implement SET-INTERRUPT-ENABLES! primitive. --- v7/src/microcode/cmpauxmd/mips.m4 | 49 +++++++++++++++++++++++++++++-- v7/src/microcode/version.h | 4 +-- v8/src/microcode/version.h | 4 +-- 3 files changed, 50 insertions(+), 7 deletions(-) diff --git a/v7/src/microcode/cmpauxmd/mips.m4 b/v7/src/microcode/cmpauxmd/mips.m4 index 34c476366..82564d4ed 100644 --- a/v7/src/microcode/cmpauxmd/mips.m4 +++ b/v7/src/microcode/cmpauxmd/mips.m4 @@ -1,6 +1,6 @@ /* #define DEBUG_INTERFACE */ /* -*-Midas-*- */ ### - ### $Id: mips.m4,v 1.9 1992/12/28 21:54:20 cph Exp $ + ### $Id: mips.m4,v 1.10 1993/01/12 10:43:07 cph Exp $ ### ### Copyright (c) 1989-1992 Massachusetts Institute of Technology ### @@ -157,6 +157,7 @@ define(closure_reg, 23) define(tramp_index, 25) define(TC_ENTITY, 0x10) +define(TC_FIXNUM, 0x1A) define(TC_CCENTRY, 0x28) # Argument (in $C_arg1) is a compiled Scheme entry point @@ -254,8 +255,9 @@ trampoline_to_interface: # ...scheme_to_interface-96 j shortcircuit_apply # ...-56 lw $C_arg2,0($stack) # procedure -52 - nop # ...-48 - nop # ...-44 + j set_interrupt_enables # ...-48 + lw $value,4($registers) # ...-44 + nop # ...-40 nop # ...-36 nop # ...-32 @@ -519,6 +521,47 @@ shortcircuit_apply_lose: j scheme_to_interface # invoke the standard apply addi $tramp_index,$0,80 + .globl set_interrupt_enables +set_interrupt_enables: + # 0($stack) has the new interrupt mask (a fixnum) + # 4($stack) has the return address (a compiled entry) + # $value has been set above to old interrupt mask + lui $at,(TC_FIXNUM*0x400) # slap fixnum type code on value + or $value,$value,$at + lw $C_arg1,0($stack) # get new interrupt mask + lw $C_arg2,48($registers) # get interrupt code + and $C_arg1,$C_arg1,$addr_mask + sw $C_arg1,4($registers) # store new mask in mask register + # Now, set up the memtop and stack_guard registers. + # Memtop is -1 if there are any pending interrupts, else + # "MemTop" if GC interrupt is enabled, else "Heap_Top". + and $C_arg2,$C_arg2,$C_arg1 # get masked interrupts + bne $C_arg2,$0,set_interrupt_enables_1 + addi $memtop,$0,-1 + andi $C_arg2,$C_arg1,4 # test for GC interrupt + lw $memtop,MemTop + bne $C_arg2,$0,set_interrupt_enables_1 + nop + lw $memtop,Heap_Top + .globl set_interrupt_enables_1 +set_interrupt_enables_1: + andi $C_arg2,$C_arg1,1 # test for stack-overflow interrupt + sw $memtop,0($registers) + # Stack_guard's value depends on whether the stack-overflow + # interrupt is enabled. + lw $C_arg3,Stack_Guard + bne $C_arg2,$0,set_interrupt_enables_2 + nop + lw $C_arg3,Constant_Top + .globl set_interrupt_enables_2 +set_interrupt_enables_2: + lw $C_arg2,4($stack) # get return address + sw $C_arg3,44($registers) # store stack_guard + and $C_arg2,$C_arg2,$addr_mask # return to caller + or $C_arg2,$C_arg2,$heap_bits + j $C_arg2 + addi $stack,$stack,8 + # Argument 1 (in $C_arg1) is the returned value .globl interface_to_C interface_to_C: diff --git a/v7/src/microcode/version.h b/v7/src/microcode/version.h index 707dcde42..63338618f 100644 --- a/v7/src/microcode/version.h +++ b/v7/src/microcode/version.h @@ -1,6 +1,6 @@ /* -*-C-*- -$Id: version.h,v 11.125 1993/01/07 23:53:55 cph Exp $ +$Id: version.h,v 11.126 1993/01/12 10:43:22 cph Exp $ Copyright (c) 1988-1992 Massachusetts Institute of Technology @@ -46,5 +46,5 @@ MIT in each case. */ #define VERSION 11 #endif #ifndef SUBVERSION -#define SUBVERSION 125 +#define SUBVERSION 126 #endif diff --git a/v8/src/microcode/version.h b/v8/src/microcode/version.h index 707dcde42..63338618f 100644 --- a/v8/src/microcode/version.h +++ b/v8/src/microcode/version.h @@ -1,6 +1,6 @@ /* -*-C-*- -$Id: version.h,v 11.125 1993/01/07 23:53:55 cph Exp $ +$Id: version.h,v 11.126 1993/01/12 10:43:22 cph Exp $ Copyright (c) 1988-1992 Massachusetts Institute of Technology @@ -46,5 +46,5 @@ MIT in each case. */ #define VERSION 11 #endif #ifndef SUBVERSION -#define SUBVERSION 125 +#define SUBVERSION 126 #endif -- 2.25.1