2022-05-31 18:04:11 +08:00
/* SPDX-License-Identifier: GPL-2.0 */
/ *
* Copyright ( C ) 2 0 2 0 - 2 0 2 2 L o o n g s o n T e c h n o l o g y C o r p o r a t i o n L i m i t e d
*
* Derived f r o m M I P S :
* Copyright ( C ) 1 9 9 4 - 2 0 0 0 , 2 0 0 1 , 2 0 0 3 R a l f B a e c h l e
* Copyright ( C ) 1 9 9 9 , 2 0 0 0 S i l i c o n G r a p h i c s , I n c .
* Copyright ( C ) 2 0 0 2 , 2 0 0 7 M a c i e j W . R o z y c k i
* Copyright ( C ) 2 0 0 1 , 2 0 1 2 M I P S T e c h n o l o g i e s , I n c . A l l r i g h t s r e s e r v e d .
* /
# include < a s m / a s m . h >
# include < a s m / a s m m a c r o . h >
# include < a s m / l o o n g a r c h . h >
# include < a s m / r e g d e f . h >
# include < a s m / f p r e g d e f . h >
# include < a s m / s t a c k f r a m e . h >
# include < a s m / t h r e a d _ i n f o . h >
.align 5
SYM_ F U N C _ S T A R T ( _ _ a r c h _ c p u _ i d l e )
/* start of rollback region */
LONG_ L t 0 , t p , T I _ F L A G S
nop
andi t 0 , t 0 , _ T I F _ N E E D _ R E S C H E D
bnez t 0 , 1 f
nop
nop
nop
idle 0
/* end of rollback region */
2022-07-26 23:57:17 +08:00
1 : jr r a
2022-05-31 18:04:11 +08:00
SYM_ F U N C _ E N D ( _ _ a r c h _ c p u _ i d l e )
SYM_ F U N C _ S T A R T ( h a n d l e _ v i n t )
BACKUP_ T 0 T 1
SAVE_ A L L
la. a b s t 1 , _ _ a r c h _ c p u _ i d l e
2022-07-26 23:57:22 +08:00
LONG_ L t 0 , s p , P T _ E R A
2022-05-31 18:04:11 +08:00
/* 32 byte rollback region */
ori t 0 , t 0 , 0 x1 f
xori t 0 , t 0 , 0 x1 f
bne t 0 , t 1 , 1 f
2022-07-26 23:57:22 +08:00
LONG_ S t 0 , s p , P T _ E R A
2022-05-31 18:04:11 +08:00
1 : move a0 , s p
move a1 , s p
la. a b s t 0 , d o _ v i n t
2022-07-26 23:57:22 +08:00
jirl r a , t 0 , 0
2022-05-31 18:04:11 +08:00
RESTORE_ A L L _ A N D _ R E T
SYM_ F U N C _ E N D ( h a n d l e _ v i n t )
SYM_ F U N C _ S T A R T ( e x c e p t _ v e c _ c e x )
b c a c h e _ p a r i t y _ e r r o r
SYM_ F U N C _ E N D ( e x c e p t _ v e c _ c e x )
.macro build_prep_badv
csrrd t 0 , L O O N G A R C H _ C S R _ B A D V
PTR_ S t 0 , s p , P T _ B V A D D R
.endm
.macro build_prep_fcsr
movfcsr2 g r a1 , f c s r0
.endm
.macro build_prep_none
.endm
.macro BUILD_HANDLER exception h a n d l e r p r e p
.align 5
SYM_ F U N C _ S T A R T ( h a n d l e _ \ e x c e p t i o n )
BACKUP_ T 0 T 1
SAVE_ A L L
build_ p r e p _ \ p r e p
move a0 , s p
la. a b s t 0 , d o _ \ h a n d l e r
2022-07-26 23:57:22 +08:00
jirl r a , t 0 , 0
2022-05-31 18:04:11 +08:00
RESTORE_ A L L _ A N D _ R E T
SYM_ F U N C _ E N D ( h a n d l e _ \ e x c e p t i o n )
.endm
BUILD_ H A N D L E R a d e a d e b a d v
BUILD_ H A N D L E R a l e a l e b a d v
BUILD_ H A N D L E R b p b p n o n e
BUILD_ H A N D L E R f p e f p e f c s r
BUILD_ H A N D L E R f p u f p u n o n e
BUILD_ H A N D L E R l s x l s x n o n e
BUILD_ H A N D L E R l a s x l a s x n o n e
BUILD_ H A N D L E R l b t l b t n o n e
BUILD_ H A N D L E R r i r i n o n e
BUILD_ H A N D L E R w a t c h w a t c h n o n e
BUILD_ H A N D L E R r e s e r v e d r e s e r v e d n o n e / * o t h e r s * /
SYM_ F U N C _ S T A R T ( h a n d l e _ s y s )
la. a b s t 0 , h a n d l e _ s y s c a l l
2022-07-26 23:57:17 +08:00
jr t 0
2022-05-31 18:04:11 +08:00
SYM_ F U N C _ E N D ( h a n d l e _ s y s )