*** cpu_support.S.bak Sun May 11 21:58:53 2008 --- cpu_support.S Fri Apr 17 23:13:33 2009 *************** *** 29,41 **** #include "utk_config.h" #if USE_TRAP | (USE_DBGSPT & USE_HOOK_TRACE) #include "isysconf.h" #endif #include "tkdev_conf.h" ! #if !USE_TRAP | USE_DBGSPT | USE_HOOK_TRACE #error ouch! #endif /* ------------------------------------------------------------------------ */ /* * Dispatcher --- 29,41 ---- #include "utk_config.h" #if USE_TRAP | (USE_DBGSPT & USE_HOOK_TRACE) #include "isysconf.h" #endif #include "tkdev_conf.h" ! #if USE_DBGSPT | USE_HOOK_TRACE #error ouch! #endif /* ------------------------------------------------------------------------ */ /* * Dispatcher *************** *** 96,107 **** --- 96,111 ---- Csym(knl_dispatch_entry): /* During interrupt disable CCR.I=1 */ #if USE_TRAP mov.w @er7, r0 and.b #CCR_EI_MASK, r0h mov.w r0, @er7 // SSR compensation (I=0) + #else + stc ccr, r0h + and.b #CCR_EI_MASK, r0h + push.w r0 #endif _ret_int_dispatch: /* During interrupt disable CCR.I=1 */ sub.w r0, r0 *************** *** 228,239 **** --- 232,245 ---- pop.l er4 pop.l er3 pop.l er2 #if USE_TRAP trapa #TRAP_RETINT // tk_ret_int() + #else + jmp @Csym(tk_ret_int_impl) #endif #endif /* USE_HLL_INTHDR */ /* * _tk_ret_int() *************** *** 342,354 **** --- 348,375 ---- mov.l er7, er5 // er5 = frame pointer #if USE_TRAP mov.w @(3*4, er7), r4 // SCCR ldc r4h, ccr + #else + #if CFN_MAX_SSYID > 0 + mov.w r0, r0 // < 0: System call + // >= 0: Extended SVC + blt l_set_retccr + + mov.w @(3*4, er7), r4 // SCCR + ldc r4h, ccr + bra l_set_end + l_set_retccr: #endif + mov.w @(3*4, er7), r4 // SCCR + stc ccr, r4h + mov.w r4, @(3*4, er7) + l_set_end: + #endif /* The interrupt disable state keeps the caller's state CCR.I=? */ mov.w r0, r4 // r4 := Function code bpl l_esvc_function *************** *** 495,502 **** --- 516,525 ---- pop.l er4 pop.l er3 pop.l er2 #if USE_TRAP trapa #TRAP_RETINT // tk_ret_int() + #else + jmp @Csym(tk_ret_int_impl) #endif