Mercurial > ecos
comparison packages/hal/mips/arch/current/include/arch.inc @ 62:7a6ac9edc838 ecos-sw-2000-01-24
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
| author | jlarmour |
|---|---|
| date | Mon, 24 Jan 2000 21:43:17 +0000 |
| parents | 1370c5e55234 |
| children | c38311975d4f |
comparison
equal
deleted
inserted
replaced
| 61:e44112c47676 | 62:7a6ac9edc838 |
|---|---|
| 54 ## Set up the value for the initial status register | 54 ## Set up the value for the initial status register |
| 55 | 55 |
| 56 #ifndef INITIAL_SR | 56 #ifndef INITIAL_SR |
| 57 | 57 |
| 58 #if defined(CYG_HAL_STARTUP_RAM) | 58 #if defined(CYG_HAL_STARTUP_RAM) |
| 59 # if defined(CYG_HAL_MIPS_SIM) || !defined(CYG_HAL_USE_ROM_MONITOR) | 59 # if defined(CYG_HAL_MIPS_SIM) || !defined(CYGSEM_HAL_USE_ROM_MONITOR) |
| 60 # define INITIAL_SR 0x1000ff00 /* CP0 usable, Ints enabled */ | 60 # define INITIAL_SR 0x1000ff00 /* CP0 usable, Ints enabled */ |
| 61 # else | 61 # else |
| 62 # define INITIAL_SR 0x1040ff00 /* as above + ROM vectors used */ | 62 # define INITIAL_SR 0x1040ff00 /* as above + ROM vectors used */ |
| 63 # endif | 63 # endif |
| 64 #elif defined(CYG_HAL_STARTUP_ROM) | 64 #elif defined(CYG_HAL_STARTUP_ROM) |
| 84 #ifdef CYGHWR_HAL_MIPS_64BIT | 84 #ifdef CYGHWR_HAL_MIPS_64BIT |
| 85 # define mips_regsize 8 | 85 # define mips_regsize 8 |
| 86 #else | 86 #else |
| 87 # define mips_regsize 4 | 87 # define mips_regsize 4 |
| 88 #endif | 88 #endif |
| 89 | |
| 90 # define mips_regsize32 4 | |
| 89 | 91 |
| 90 #if defined(CYGHWR_HAL_MIPS_FPU) | 92 #if defined(CYGHWR_HAL_MIPS_FPU) |
| 91 # if defined(CYGHWR_HAL_MIPS_FPU_64BIT) | 93 # if defined(CYGHWR_HAL_MIPS_FPU_64BIT) |
| 92 # define mips_fpuregsize 8 | 94 # define mips_fpuregsize 8 |
| 93 # elif defined(CYGHWR_HAL_MIPS_FPU_32BIT) | 95 # elif defined(CYGHWR_HAL_MIPS_FPU_32BIT) |
| 102 #define mipsreg_hi (mips_regsize*32) | 104 #define mipsreg_hi (mips_regsize*32) |
| 103 #define mipsreg_lo (mipsreg_hi+mips_regsize) | 105 #define mipsreg_lo (mipsreg_hi+mips_regsize) |
| 104 #ifdef CYGHWR_HAL_MIPS_FPU | 106 #ifdef CYGHWR_HAL_MIPS_FPU |
| 105 # define mipsreg_fpureg (mipsreg_lo+mips_regsize) | 107 # define mipsreg_fpureg (mipsreg_lo+mips_regsize) |
| 106 # define mipsreg_fcr31 (mipsreg_fpureg+(mips_fpuregsize*32)) | 108 # define mipsreg_fcr31 (mipsreg_fpureg+(mips_fpuregsize*32)) |
| 107 # define mipsreg_fppad (mipsreg_fcr31+mips_regsize) | 109 # define mipsreg_fppad (mipsreg_fcr31+mips_regsize32) |
| 108 # define mipsreg_vector (mipsreg_fppad+mips_regsize) | 110 # define mipsreg_vector (mipsreg_fppad+mips_regsize32) |
| 109 #else | 111 #else |
| 110 # define mipsreg_vector (mipsreg_lo+mips_regsize) | 112 # define mipsreg_vector (mipsreg_lo+mips_regsize32) |
| 111 #endif | 113 #endif |
| 112 #define mipsreg_pc (mipsreg_vector+mips_regsize) | 114 #define mipsreg_pc (mipsreg_vector+mips_regsize32) |
| 113 #define mipsreg_sr (mipsreg_pc+mips_regsize) | 115 #define mipsreg_sr (mipsreg_pc+mips_regsize32) |
| 114 #define mipsreg_cachectrl (mipsreg_sr+mips_regsize) | 116 #define mipsreg_cachectrl (mipsreg_sr+mips_regsize32) |
| 115 #define mipsreg_cause (mipsreg_cachectrl+mips_regsize) | 117 #define mipsreg_cause (mipsreg_cachectrl+mips_regsize32) |
| 116 #define mipsreg_badvr (mipsreg_cause+mips_regsize) | 118 #define mipsreg_badvr (mipsreg_cause+mips_regsize32) |
| 117 #define mipsreg_prid (mipsreg_badvr+mips_regsize) | 119 #define mipsreg_prid (mipsreg_badvr+mips_regsize32) |
| 118 #define mipsreg_config (mipsreg_prid+mips_regsize) | 120 #define mipsreg_config (mipsreg_prid+mips_regsize32) |
| 119 #define mipsreg_size (mipsreg_config+mips_regsize) | 121 #define mipsreg_size (mipsreg_config+mips_regsize32) |
| 120 | 122 |
| 121 #define mips_exception_decrement (mipsreg_size*2) | 123 #define mips_exception_decrement (mipsreg_size*2) |
| 122 | 124 |
| 123 ##----------------------------------------------------------------------------- | 125 ##----------------------------------------------------------------------------- |
| 124 ## Minimal stack frame size uses to call functions from asm. | 126 ## Minimal stack frame size uses to call functions from asm. |
| 324 .byte 4, 0, 1, 0 | 326 .byte 4, 0, 1, 0 |
| 325 .byte 2, 0, 1, 0 | 327 .byte 2, 0, 1, 0 |
| 326 .byte 3, 0, 1, 0 | 328 .byte 3, 0, 1, 0 |
| 327 .byte 2, 0, 1, 0 | 329 .byte 2, 0, 1, 0 |
| 328 .endm | 330 .endm |
| 331 #endif | |
| 332 | |
| 333 #------------------------------------------------------------------------------ | |
| 334 # Register save and restore macros. These expect a pointer to a CPU save state | |
| 335 # area in the register \ptr. The GPR indicated by \reg will be saved into its | |
| 336 # slot in that structure. | |
| 337 | |
| 338 #ifdef CYGHWR_HAL_MIPS_64BIT | |
| 339 | |
| 340 .macro sgpr reg,ptr | |
| 341 sd $\reg,(mipsreg_regs+\reg*mips_regsize)(\ptr) | |
| 342 .endm | |
| 343 | |
| 344 .macro lgpr reg,ptr | |
| 345 ld $\reg,(mipsreg_regs+\reg*mips_regsize)(\ptr) | |
| 346 .endm | |
| 347 | |
| 348 .macro slo reg,ptr | |
| 349 sd \reg,(mipsreg_lo)(\ptr) | |
| 350 .endm | |
| 351 | |
| 352 .macro shi reg,ptr | |
| 353 sd \reg,(mipsreg_hi)(\ptr) | |
| 354 .endm | |
| 355 | |
| 356 .macro llo reg,ptr | |
| 357 ld \reg,(mipsreg_lo)(\ptr) | |
| 358 .endm | |
| 359 | |
| 360 .macro lhi reg,ptr | |
| 361 ld \reg,(mipsreg_hi)(\ptr) | |
| 362 .endm | |
| 363 | |
| 364 .macro ssp reg,ptr | |
| 365 sd \reg,(mipsreg_regs+29*mips_regsize)(\ptr) | |
| 366 .endm | |
| 367 | |
| 368 .macro lsp reg,ptr | |
| 369 ld \reg,(mipsreg_regs+29*mips_regsize)(\ptr) | |
| 370 .endm | |
| 371 | |
| 372 #else | |
| 373 | |
| 374 .macro sgpr reg,ptr | |
| 375 sw $\reg,(mipsreg_regs+\reg*mips_regsize)(\ptr) | |
| 376 .endm | |
| 377 | |
| 378 .macro lgpr reg,ptr | |
| 379 lw $\reg,(mipsreg_regs+\reg*mips_regsize)(\ptr) | |
| 380 .endm | |
| 381 | |
| 382 .macro slo reg,ptr | |
| 383 sw \reg,(mipsreg_lo)(\ptr) | |
| 384 .endm | |
| 385 | |
| 386 .macro shi reg,ptr | |
| 387 sw \reg,(mipsreg_hi)(\ptr) | |
| 388 .endm | |
| 389 | |
| 390 .macro llo reg,ptr | |
| 391 lw \reg,(mipsreg_lo)(\ptr) | |
| 392 .endm | |
| 393 | |
| 394 .macro lhi reg,ptr | |
| 395 lw \reg,(mipsreg_hi)(\ptr) | |
| 396 .endm | |
| 397 | |
| 398 .macro ssp reg,ptr | |
| 399 sw \reg,(mipsreg_regs+29*mips_regsize)(\ptr) | |
| 400 .endm | |
| 401 | |
| 402 .macro lsp reg,ptr | |
| 403 lw \reg,(mipsreg_regs+29*mips_regsize)(\ptr) | |
| 404 .endm | |
| 405 | |
| 329 #endif | 406 #endif |
| 330 | 407 |
| 331 #------------------------------------------------------------------------------ | 408 #------------------------------------------------------------------------------ |
| 332 # FPU macros. | 409 # FPU macros. |
| 333 # The MIPS floating point unit essentially operates in two modes. In the first | 410 # The MIPS floating point unit essentially operates in two modes. In the first |
