2008-06-24 05:33:03 +04:00
/ *
* Copyright 2 0 0 8 M i c h a e l E l l e r m a n , I B M C o r p o r a t i o n .
*
*
* This p r o g r a m i s f r e e s o f t w a r e ; you can redistribute it and/or
* modify i t u n d e r t h e t e r m s o f t h e G N U G e n e r a l P u b l i c L i c e n s e
* as p u b l i s h e d b y t h e F r e e S o f t w a r e F o u n d a t i o n ; either version
* 2 of t h e L i c e n s e , o r ( a t y o u r o p t i o n ) a n y l a t e r v e r s i o n .
* /
# include < a s m / f e a t u r e - f i x u p s . h >
# include < a s m / p p c _ a s m . h >
2008-07-01 19:16:40 +04:00
# include < a s m / s y n c h . h >
2018-07-05 19:24:57 +03:00
# include < a s m / a s m - c o m p a t . h >
2008-06-24 05:33:03 +04:00
.text
# define g l o b l ( x ) \
.globl x; \
x :
globl( f t r _ f i x u p _ t e s t 1 )
or 1 ,1 ,1
or 2 ,2 ,2 / * f i x u p w i l l n o p o u t t h i s i n s t r u c t i o n * /
or 3 ,3 ,3
globl( e n d _ f t r _ f i x u p _ t e s t 1 )
globl( f t r _ f i x u p _ t e s t 1 _ o r i g )
or 1 ,1 ,1
or 2 ,2 ,2
or 3 ,3 ,3
globl( f t r _ f i x u p _ t e s t 1 _ e x p e c t e d )
or 1 ,1 ,1
nop
or 3 ,3 ,3
globl( f t r _ f i x u p _ t e s t 2 )
or 1 ,1 ,1
or 2 ,2 ,2 / * f i x u p w i l l r e p l a c e t h i s w i t h f t r _ f i x u p _ t e s t 2 _ a l t * /
or 3 ,3 ,3
globl( e n d _ f t r _ f i x u p _ t e s t 2 )
globl( f t r _ f i x u p _ t e s t 2 _ o r i g )
or 1 ,1 ,1
or 2 ,2 ,2
or 3 ,3 ,3
globl( f t r _ f i x u p _ t e s t 2 _ a l t )
or 3 1 ,3 1 ,3 1
globl( f t r _ f i x u p _ t e s t 2 _ e x p e c t e d )
or 1 ,1 ,1
or 3 1 ,3 1 ,3 1
or 3 ,3 ,3
globl( f t r _ f i x u p _ t e s t 3 )
or 1 ,1 ,1
or 2 ,2 ,2 / * f i x u p w i l l f a i l t o r e p l a c e t h i s * /
or 3 ,3 ,3
globl( e n d _ f t r _ f i x u p _ t e s t 3 )
globl( f t r _ f i x u p _ t e s t 3 _ o r i g )
or 1 ,1 ,1
or 2 ,2 ,2
or 3 ,3 ,3
globl( f t r _ f i x u p _ t e s t 3 _ a l t )
or 3 1 ,3 1 ,3 1
or 3 1 ,3 1 ,3 1
globl( f t r _ f i x u p _ t e s t 4 )
or 1 ,1 ,1
or 2 ,2 ,2
or 2 ,2 ,2
or 2 ,2 ,2
or 2 ,2 ,2
or 3 ,3 ,3
globl( e n d _ f t r _ f i x u p _ t e s t 4 )
globl( f t r _ f i x u p _ t e s t 4 _ e x p e c t e d )
or 1 ,1 ,1
or 3 1 ,3 1 ,3 1
or 3 1 ,3 1 ,3 1
nop
nop
or 3 ,3 ,3
globl( f t r _ f i x u p _ t e s t 4 _ o r i g )
or 1 ,1 ,1
or 2 ,2 ,2
or 2 ,2 ,2
or 2 ,2 ,2
or 2 ,2 ,2
or 3 ,3 ,3
globl( f t r _ f i x u p _ t e s t 4 _ a l t )
or 3 1 ,3 1 ,3 1
or 3 1 ,3 1 ,3 1
globl( f t r _ f i x u p _ t e s t 5 )
or 1 ,1 ,1
BEGIN_ F T R _ S E C T I O N
or 2 ,2 ,2
or 2 ,2 ,2
or 2 ,2 ,2
or 2 ,2 ,2
or 2 ,2 ,2
or 2 ,2 ,2
or 2 ,2 ,2
FTR_ S E C T I O N _ E L S E
2 : b 3 f
3 : or 5 ,5 ,5
beq 3 b
b 1 f
or 6 ,6 ,6
b 2 b
1 : bdnz 3 b
ALT_ F T R _ S E C T I O N _ E N D ( 0 , 1 )
or 1 ,1 ,1
globl( e n d _ f t r _ f i x u p _ t e s t 5 )
globl( f t r _ f i x u p _ t e s t 5 _ e x p e c t e d )
or 1 ,1 ,1
2 : b 3 f
3 : or 5 ,5 ,5
beq 3 b
b 1 f
or 6 ,6 ,6
b 2 b
1 : bdnz 3 b
or 1 ,1 ,1
globl( f t r _ f i x u p _ t e s t 6 )
1 : or 1 ,1 ,1
BEGIN_ F T R _ S E C T I O N
or 5 ,5 ,5
2008-07-01 19:16:16 +04:00
2 : PPC_ L C M P I r3 ,0
2008-06-24 05:33:03 +04:00
beq 4 f
blt 2 b
b 1 b
b 4 f
FTR_ S E C T I O N _ E L S E
2 : or 2 ,2 ,2
2008-07-01 19:16:16 +04:00
PPC_ L C M P I r3 ,1
2008-06-24 05:33:03 +04:00
beq 3 f
blt 2 b
b 3 f
b 1 b
ALT_ F T R _ S E C T I O N _ E N D ( 0 , 1 )
3 : or 1 ,1 ,1
or 2 ,2 ,2
4 : or 3 ,3 ,3
globl( e n d _ f t r _ f i x u p _ t e s t 6 )
globl( f t r _ f i x u p _ t e s t 6 _ e x p e c t e d )
1 : or 1 ,1 ,1
2 : or 2 ,2 ,2
2008-07-01 19:16:16 +04:00
PPC_ L C M P I r3 ,1
2008-06-24 05:33:03 +04:00
beq 3 f
blt 2 b
b 3 f
b 1 b
powerpc/lib: Fix feature fixup test of external branch
The expected case for this test was wrong, the source of the alternate
code sequence is:
FTR_SECTION_ELSE
2: or 2,2,2
PPC_LCMPI r3,1
beq 3f
blt 2b
b 3f
b 1b
ALT_FTR_SECTION_END(0, 1)
3: or 1,1,1
or 2,2,2
4: or 3,3,3
So when it's patched the '3' label should still be on the 'or 1,1,1',
and the 4 label is irrelevant and can be removed.
Fixes: 362e7701fd18 ("powerpc: Add self-tests of the feature fixup code")
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2018-04-16 17:39:02 +03:00
3 : or 1 ,1 ,1
2008-06-24 05:33:03 +04:00
or 2 ,2 ,2
powerpc/lib: Fix feature fixup test of external branch
The expected case for this test was wrong, the source of the alternate
code sequence is:
FTR_SECTION_ELSE
2: or 2,2,2
PPC_LCMPI r3,1
beq 3f
blt 2b
b 3f
b 1b
ALT_FTR_SECTION_END(0, 1)
3: or 1,1,1
or 2,2,2
4: or 3,3,3
So when it's patched the '3' label should still be on the 'or 1,1,1',
and the 4 label is irrelevant and can be removed.
Fixes: 362e7701fd18 ("powerpc: Add self-tests of the feature fixup code")
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2018-04-16 17:39:02 +03:00
or 3 ,3 ,3
2008-06-24 05:33:03 +04:00
2018-04-16 17:39:05 +03:00
globl( f t r _ f i x u p _ t e s t 7 )
or 1 ,1 ,1
BEGIN_ F T R _ S E C T I O N
or 2 ,2 ,2
or 2 ,2 ,2
or 2 ,2 ,2
or 2 ,2 ,2
or 2 ,2 ,2
or 2 ,2 ,2
or 2 ,2 ,2
FTR_ S E C T I O N _ E L S E
2 : b 3 f
3 : or 5 ,5 ,5
beq 3 b
b 1 f
or 6 ,6 ,6
b 2 b
bdnz 3 b
1 :
ALT_ F T R _ S E C T I O N _ E N D ( 0 , 1 )
or 1 ,1 ,1
or 1 ,1 ,1
globl( e n d _ f t r _ f i x u p _ t e s t 7 )
nop
globl( f t r _ f i x u p _ t e s t 7 _ e x p e c t e d )
or 1 ,1 ,1
2 : b 3 f
3 : or 5 ,5 ,5
beq 3 b
b 1 f
or 6 ,6 ,6
b 2 b
bdnz 3 b
1 : or 1 ,1 ,1
2008-06-24 05:33:03 +04:00
2010-11-07 21:22:29 +03:00
# if 0
/ * Test t h a t i f w e h a v e a l a r g e r e l s e c a s e t h e a s s e m b l e r s p o t s i t a n d
* reports a n e r r o r . #i f 0 ' e d s o a s n o t t o b r e a k t h e b u i l d n o r m a l l y .
* /
2018-04-16 17:39:04 +03:00
ftr_fixup_test_too_big :
2010-11-07 21:22:29 +03:00
or 1 ,1 ,1
BEGIN_ F T R _ S E C T I O N
or 2 ,2 ,2
or 2 ,2 ,2
or 2 ,2 ,2
FTR_ S E C T I O N _ E L S E
or 3 ,3 ,3
or 3 ,3 ,3
or 3 ,3 ,3
or 3 ,3 ,3
ALT_ F T R _ S E C T I O N _ E N D ( 0 , 1 )
or 1 ,1 ,1
# endif
2008-06-24 05:33:03 +04:00
# define M A K E _ M A C R O _ T E S T ( T Y P E ) \
globl( f t r _ f i x u p _ t e s t _ ## T Y P E # # _ m a c r o s ) \
or 1 ,1 ,1 ; \
/* Basic test, this section should all be nop'ed */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
END_ ## T Y P E # # _ S E C T I O N ( 0 , 1 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Basic test, this section should NOT be nop'ed */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
END_ ## T Y P E # # _ S E C T I O N ( 0 , 0 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nesting test, inner section should be nop'ed */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 80 ) \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
END_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 0 , 1 , 8 0 ) \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
END_ ## T Y P E # # _ S E C T I O N ( 0 , 0 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nesting test, whole section should be nop'ed */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 80 ) \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
END_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 0 , 0 , 8 0 ) \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
END_ ## T Y P E # # _ S E C T I O N ( 0 , 1 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nesting test, none should be nop'ed */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 80 ) \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
END_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 0 , 0 , 8 0 ) \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
END_ ## T Y P E # # _ S E C T I O N ( 0 , 0 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Basic alt section test, default case should be taken */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
# # TYPE## _ S E C T I O N _ E L S E \
or 5 ,5 ,5 ; \
or 5 ,5 ,5 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D ( 0 , 0 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Basic alt section test, else case should be taken */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
# # TYPE## _ S E C T I O N _ E L S E \
or 3 1 ,3 1 ,3 1 ; \
or 3 1 ,3 1 ,3 1 ; \
or 3 1 ,3 1 ,3 1 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D ( 0 , 1 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Alt with smaller else case, should be padded with nops */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
# # TYPE## _ S E C T I O N _ E L S E \
or 3 1 ,3 1 ,3 1 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D ( 0 , 1 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Alt section with nested section in default case */ \
/* Default case should be taken, with nop'ed inner section */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 3 ,3 ,3 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 95 ) \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
END_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 0 , 1 , 9 5 ) \
or 3 ,3 ,3 ; \
# # TYPE## _ S E C T I O N _ E L S E \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D ( 0 , 0 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Alt section with nested section in else, default taken */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
# # TYPE## _ S E C T I O N _ E L S E \
or 5 ,5 ,5 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 95 ) \
or 3 ,3 ,3 ; \
END_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 0 , 1 , 9 5 ) \
or 5 ,5 ,5 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D ( 0 , 0 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Alt section with nested section in else, else taken & nop */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
# # TYPE## _ S E C T I O N _ E L S E \
or 5 ,5 ,5 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 95 ) \
or 3 ,3 ,3 ; \
END_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 0 , 1 , 9 5 ) \
or 5 ,5 ,5 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D ( 0 , 1 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Feature section with nested alt section, default taken */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 2 ,2 ,2 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 95 ) \
or 1 ,1 ,1 ; \
# # TYPE## _ S E C T I O N _ E L S E _ N E S T E D ( 95 ) \
or 5 ,5 ,5 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D _ N E S T E D ( 0 , 0 , 9 5 ) \
or 2 ,2 ,2 ; \
END_ ## T Y P E # # _ S E C T I O N ( 0 , 0 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Feature section with nested alt section, else taken */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 2 ,2 ,2 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 95 ) \
or 1 ,1 ,1 ; \
# # TYPE## _ S E C T I O N _ E L S E _ N E S T E D ( 95 ) \
or 5 ,5 ,5 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D _ N E S T E D ( 0 , 1 , 9 5 ) \
or 2 ,2 ,2 ; \
END_ ## T Y P E # # _ S E C T I O N ( 0 , 0 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Feature section with nested alt section, all nop'ed */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 2 ,2 ,2 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 95 ) \
or 1 ,1 ,1 ; \
# # TYPE## _ S E C T I O N _ E L S E _ N E S T E D ( 95 ) \
or 5 ,5 ,5 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D _ N E S T E D ( 0 , 0 , 9 5 ) \
or 2 ,2 ,2 ; \
END_ ## T Y P E # # _ S E C T I O N ( 0 , 1 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nested alt sections, default with inner default taken */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 2 ,2 ,2 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 95 ) \
or 1 ,1 ,1 ; \
# # TYPE## _ S E C T I O N _ E L S E _ N E S T E D ( 95 ) \
or 5 ,5 ,5 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D _ N E S T E D ( 0 , 0 , 9 5 ) \
or 2 ,2 ,2 ; \
# # TYPE## _ S E C T I O N _ E L S E \
or 3 1 ,3 1 ,3 1 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 94 ) \
or 5 ,5 ,5 ; \
# # TYPE## _ S E C T I O N _ E L S E _ N E S T E D ( 94 ) \
or 1 ,1 ,1 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D _ N E S T E D ( 0 , 0 , 9 4 ) \
or 3 1 ,3 1 ,3 1 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D ( 0 , 0 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nested alt sections, default with inner else taken */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 2 ,2 ,2 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 95 ) \
or 1 ,1 ,1 ; \
# # TYPE## _ S E C T I O N _ E L S E _ N E S T E D ( 95 ) \
or 5 ,5 ,5 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D _ N E S T E D ( 0 , 1 , 9 5 ) \
or 2 ,2 ,2 ; \
# # TYPE## _ S E C T I O N _ E L S E \
or 3 1 ,3 1 ,3 1 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 94 ) \
or 5 ,5 ,5 ; \
# # TYPE## _ S E C T I O N _ E L S E _ N E S T E D ( 94 ) \
or 1 ,1 ,1 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D _ N E S T E D ( 0 , 0 , 9 4 ) \
or 3 1 ,3 1 ,3 1 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D ( 0 , 0 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nested alt sections, else with inner default taken */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 2 ,2 ,2 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 95 ) \
or 1 ,1 ,1 ; \
# # TYPE## _ S E C T I O N _ E L S E _ N E S T E D ( 95 ) \
or 5 ,5 ,5 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D _ N E S T E D ( 0 , 1 , 9 5 ) \
or 2 ,2 ,2 ; \
# # TYPE## _ S E C T I O N _ E L S E \
or 3 1 ,3 1 ,3 1 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 94 ) \
or 5 ,5 ,5 ; \
# # TYPE## _ S E C T I O N _ E L S E _ N E S T E D ( 94 ) \
or 1 ,1 ,1 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D _ N E S T E D ( 0 , 0 , 9 4 ) \
or 3 1 ,3 1 ,3 1 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D ( 0 , 1 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nested alt sections, else with inner else taken */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 2 ,2 ,2 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 95 ) \
or 1 ,1 ,1 ; \
# # TYPE## _ S E C T I O N _ E L S E _ N E S T E D ( 95 ) \
or 5 ,5 ,5 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D _ N E S T E D ( 0 , 1 , 9 5 ) \
or 2 ,2 ,2 ; \
# # TYPE## _ S E C T I O N _ E L S E \
or 3 1 ,3 1 ,3 1 ; \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 94 ) \
or 5 ,5 ,5 ; \
# # TYPE## _ S E C T I O N _ E L S E _ N E S T E D ( 94 ) \
or 1 ,1 ,1 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D _ N E S T E D ( 0 , 1 , 9 4 ) \
or 3 1 ,3 1 ,3 1 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D ( 0 , 1 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nested alt sections, else can have large else case */ \
BEGIN_ ## T Y P E # # _ S E C T I O N \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
# # TYPE## _ S E C T I O N _ E L S E \
BEGIN_ ## T Y P E # # _ S E C T I O N _ N E S T E D ( 94 ) \
or 5 ,5 ,5 ; \
or 5 ,5 ,5 ; \
or 5 ,5 ,5 ; \
or 5 ,5 ,5 ; \
# # TYPE## _ S E C T I O N _ E L S E _ N E S T E D ( 94 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D _ N E S T E D ( 0 , 1 , 9 4 ) \
ALT_ ## T Y P E # # _ S E C T I O N _ E N D ( 0 , 1 ) \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ;
# define M A K E _ M A C R O _ T E S T _ E X P E C T E D ( T Y P E ) \
globl( f t r _ f i x u p _ t e s t _ ## T Y P E # # _ m a c r o s _ e x p e c t e d ) \
or 1 ,1 ,1 ; \
/* Basic test, this section should all be nop'ed */ \
/* BEGIN_##TYPE##_SECTION */ \
nop; \
nop; \
nop; \
/* END_##TYPE##_SECTION(0, 1) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Basic test, this section should NOT be nop'ed */ \
/* BEGIN_##TYPE##_SECTION */ \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
/* END_##TYPE##_SECTION(0, 0) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nesting test, inner section should be nop'ed */ \
/* BEGIN_##TYPE##_SECTION */ \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
/* BEGIN_##TYPE##_SECTION_NESTED(80) */ \
nop; \
nop; \
/* END_##TYPE##_SECTION_NESTED(0, 1, 80) */ \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
/* END_##TYPE##_SECTION(0, 0) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nesting test, whole section should be nop'ed */ \
/* NB. inner section is not nop'ed, but then entire outer is */ \
/* BEGIN_##TYPE##_SECTION */ \
nop; \
nop; \
/* BEGIN_##TYPE##_SECTION_NESTED(80) */ \
nop; \
nop; \
/* END_##TYPE##_SECTION_NESTED(0, 0, 80) */ \
nop; \
nop; \
/* END_##TYPE##_SECTION(0, 1) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nesting test, none should be nop'ed */ \
/* BEGIN_##TYPE##_SECTION */ \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
/* BEGIN_##TYPE##_SECTION_NESTED(80) */ \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
/* END_##TYPE##_SECTION_NESTED(0, 0, 80) */ \
or 2 ,2 ,2 ; \
or 2 ,2 ,2 ; \
/* END_##TYPE##_SECTION(0, 0) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Basic alt section test, default case should be taken */ \
/* BEGIN_##TYPE##_SECTION */ \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
/* ##TYPE##_SECTION_ELSE */ \
/* or 5,5,5; */ \
/* or 5,5,5; */ \
/* ALT_##TYPE##_SECTION_END(0, 0) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Basic alt section test, else case should be taken */ \
/* BEGIN_##TYPE##_SECTION */ \
/* or 3,3,3; */ \
/* or 3,3,3; */ \
/* or 3,3,3; */ \
/* ##TYPE##_SECTION_ELSE */ \
or 3 1 ,3 1 ,3 1 ; \
or 3 1 ,3 1 ,3 1 ; \
or 3 1 ,3 1 ,3 1 ; \
/* ALT_##TYPE##_SECTION_END(0, 1) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Alt with smaller else case, should be padded with nops */ \
/* BEGIN_##TYPE##_SECTION */ \
/* or 3,3,3; */ \
/* or 3,3,3; */ \
/* or 3,3,3; */ \
/* ##TYPE##_SECTION_ELSE */ \
or 3 1 ,3 1 ,3 1 ; \
nop; \
nop; \
/* ALT_##TYPE##_SECTION_END(0, 1) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Alt section with nested section in default case */ \
/* Default case should be taken, with nop'ed inner section */ \
/* BEGIN_##TYPE##_SECTION */ \
or 3 ,3 ,3 ; \
/* BEGIN_##TYPE##_SECTION_NESTED(95) */ \
nop; \
nop; \
/* END_##TYPE##_SECTION_NESTED(0, 1, 95) */ \
or 3 ,3 ,3 ; \
/* ##TYPE##_SECTION_ELSE */ \
/* or 2,2,2; */ \
/* or 2,2,2; */ \
/* ALT_##TYPE##_SECTION_END(0, 0) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Alt section with nested section in else, default taken */ \
/* BEGIN_##TYPE##_SECTION */ \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
or 3 ,3 ,3 ; \
/* ##TYPE##_SECTION_ELSE */ \
/* or 5,5,5; */ \
/* BEGIN_##TYPE##_SECTION_NESTED(95) */ \
/* or 3,3,3; */ \
/* END_##TYPE##_SECTION_NESTED(0, 1, 95) */ \
/* or 5,5,5; */ \
/* ALT_##TYPE##_SECTION_END(0, 0) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Alt section with nested section in else, else taken & nop */ \
/* BEGIN_##TYPE##_SECTION */ \
/* or 3,3,3; */ \
/* or 3,3,3; */ \
/* or 3,3,3; */ \
/* ##TYPE##_SECTION_ELSE */ \
or 5 ,5 ,5 ; \
/* BEGIN_##TYPE##_SECTION_NESTED(95) */ \
nop; \
/* END_##TYPE##_SECTION_NESTED(0, 1, 95) */ \
or 5 ,5 ,5 ; \
/* ALT_##TYPE##_SECTION_END(0, 1) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Feature section with nested alt section, default taken */ \
/* BEGIN_##TYPE##_SECTION */ \
or 2 ,2 ,2 ; \
/* BEGIN_##TYPE##_SECTION_NESTED(95) */ \
or 1 ,1 ,1 ; \
/* ##TYPE##_SECTION_ELSE_NESTED(95) */ \
/* or 5,5,5; */ \
/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */ \
or 2 ,2 ,2 ; \
/* END_##TYPE##_SECTION(0, 0) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Feature section with nested alt section, else taken */ \
/* BEGIN_##TYPE##_SECTION */ \
or 2 ,2 ,2 ; \
/* BEGIN_##TYPE##_SECTION_NESTED(95) */ \
/* or 1,1,1; */ \
/* ##TYPE##_SECTION_ELSE_NESTED(95) */ \
or 5 ,5 ,5 ; \
/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */ \
or 2 ,2 ,2 ; \
/* END_##TYPE##_SECTION(0, 0) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Feature section with nested alt section, all nop'ed */ \
/* BEGIN_##TYPE##_SECTION */ \
nop; \
/* BEGIN_##TYPE##_SECTION_NESTED(95) */ \
nop; \
/* ##TYPE##_SECTION_ELSE_NESTED(95) */ \
/* or 5,5,5; */ \
/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */ \
nop; \
/* END_##TYPE##_SECTION(0, 1) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nested alt sections, default with inner default taken */ \
/* BEGIN_##TYPE##_SECTION */ \
or 2 ,2 ,2 ; \
/* BEGIN_##TYPE##_SECTION_NESTED(95) */ \
or 1 ,1 ,1 ; \
/* ##TYPE##_SECTION_ELSE_NESTED(95) */ \
/* or 5,5,5; */ \
/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 95) */ \
or 2 ,2 ,2 ; \
/* ##TYPE##_SECTION_ELSE */ \
/* or 31,31,31; */ \
/* BEGIN_##TYPE##_SECTION_NESTED(94) */ \
/* or 5,5,5; */ \
/* ##TYPE##_SECTION_ELSE_NESTED(94) */ \
/* or 1,1,1; */ \
/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */ \
/* or 31,31,31; */ \
/* ALT_##TYPE##_SECTION_END(0, 0) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nested alt sections, default with inner else taken */ \
/* BEGIN_##TYPE##_SECTION */ \
or 2 ,2 ,2 ; \
/* BEGIN_##TYPE##_SECTION_NESTED(95) */ \
/* or 1,1,1; */ \
/* ##TYPE##_SECTION_ELSE_NESTED(95) */ \
or 5 ,5 ,5 ; \
/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */ \
or 2 ,2 ,2 ; \
/* ##TYPE##_SECTION_ELSE */ \
/* or 31,31,31; */ \
/* BEGIN_##TYPE##_SECTION_NESTED(94) */ \
/* or 5,5,5; */ \
/* ##TYPE##_SECTION_ELSE_NESTED(94) */ \
/* or 1,1,1; */ \
/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */ \
/* or 31,31,31; */ \
/* ALT_##TYPE##_SECTION_END(0, 0) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nested alt sections, else with inner default taken */ \
/* BEGIN_##TYPE##_SECTION */ \
/* or 2,2,2; */ \
/* BEGIN_##TYPE##_SECTION_NESTED(95) */ \
/* or 1,1,1; */ \
/* ##TYPE##_SECTION_ELSE_NESTED(95) */ \
/* or 5,5,5; */ \
/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */ \
/* or 2,2,2; */ \
/* ##TYPE##_SECTION_ELSE */ \
or 3 1 ,3 1 ,3 1 ; \
/* BEGIN_##TYPE##_SECTION_NESTED(94) */ \
or 5 ,5 ,5 ; \
/* ##TYPE##_SECTION_ELSE_NESTED(94) */ \
/* or 1,1,1; */ \
/* ALT_##TYPE##_SECTION_END_NESTED(0, 0, 94) */ \
or 3 1 ,3 1 ,3 1 ; \
/* ALT_##TYPE##_SECTION_END(0, 1) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nested alt sections, else with inner else taken */ \
/* BEGIN_##TYPE##_SECTION */ \
/* or 2,2,2; */ \
/* BEGIN_##TYPE##_SECTION_NESTED(95) */ \
/* or 1,1,1; */ \
/* ##TYPE##_SECTION_ELSE_NESTED(95) */ \
/* or 5,5,5; */ \
/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 95) */ \
/* or 2,2,2; */ \
/* ##TYPE##_SECTION_ELSE */ \
or 3 1 ,3 1 ,3 1 ; \
/* BEGIN_##TYPE##_SECTION_NESTED(94) */ \
/* or 5,5,5; */ \
/* ##TYPE##_SECTION_ELSE_NESTED(94) */ \
or 1 ,1 ,1 ; \
/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) */ \
or 3 1 ,3 1 ,3 1 ; \
/* ALT_##TYPE##_SECTION_END(0, 1) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* Nested alt sections, else can have large else case */ \
/* BEGIN_##TYPE##_SECTION */ \
/* or 2,2,2; */ \
/* or 2,2,2; */ \
/* or 2,2,2; */ \
/* or 2,2,2; */ \
/* ##TYPE##_SECTION_ELSE */ \
/* BEGIN_##TYPE##_SECTION_NESTED(94) */ \
/* or 5,5,5; */ \
/* or 5,5,5; */ \
/* or 5,5,5; */ \
/* or 5,5,5; */ \
/* ##TYPE##_SECTION_ELSE_NESTED(94) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ; \
/* ALT_##TYPE##_SECTION_END_NESTED(0, 1, 94) */ \
/* ALT_##TYPE##_SECTION_END(0, 1) */ \
or 1 ,1 ,1 ; \
or 1 ,1 ,1 ;
MAKE_ M A C R O _ T E S T ( F T R ) ;
MAKE_ M A C R O _ T E S T _ E X P E C T E D ( F T R ) ;
# ifdef C O N F I G _ P P C 6 4
MAKE_ M A C R O _ T E S T ( F W _ F T R ) ;
MAKE_ M A C R O _ T E S T _ E X P E C T E D ( F W _ F T R ) ;
# endif
2008-07-01 19:16:40 +04:00
globl( l w s y n c _ f i x u p _ t e s t )
1 : or 1 ,1 ,1
LWSYNC
globl( e n d _ l w s y n c _ f i x u p _ t e s t )
globl( l w s y n c _ f i x u p _ t e s t _ e x p e c t e d _ L W S Y N C )
1 : or 1 ,1 ,1
lwsync
globl( l w s y n c _ f i x u p _ t e s t _ e x p e c t e d _ S Y N C )
1 : or 1 ,1 ,1
sync