All pastes #177282 Raw Edit

mirak

public c v1 · immutable
#177282 ·published 2006-09-20 09:52 UTC
rendered paste body
#ifdef CPU_COLDFIREstatic  void clip_block_to_dest(int16_t * block, uint8_t * dest,const int stride){	asm volatile(				"move.l %[dest],%%a0					\n\t"		/* init loop for i=0 to 7 */			"move.l #8,%%d1							\n\t"		"clr.l %%d0								\n\t"		"clr.l %%d3								\n\t"		"foradd:								\n\t"		"movem.l (%[block]),%%d4-%%d7				\n\t"			/* dot 2*/				"move.w %%d4,%%d3				\n\t"		"cmp.l   #255,%%d3   				\n\t"		"bls.b   2f          				\n\t"		"spl.b   %%d3						\n\t"  		"2	:                    			\n\t"				/* dot 1*/			"swap.w %%d4					\n\t"			"move.w %%d4,%%d0				\n\t"		"cmp.l   #255,%%d0   				\n\t"  /* overflow? */		"bls.b   1f          				\n\t"  /* no: return value */		"spl.b   %%d0						\n\t"  /* yes: set low byte to appropriate boundary */		"1	:                    			\n\t"				/* save dot 1*/				"move.b %%d0,%%d2					\n\t"		/* save dot 2*/				"lsl.l  #8,%%d2					\n\t"		"move.b %%d3,%%d2					\n\t"		/* dot 4*/						"move.w %%d5,%%d3				\n\t"		"cmp.l   #255,%%d3   				\n\t"		"bls.b   4f          				\n\t"		"spl.b   %%d3						\n\t"  		"4	:                    			\n\t"		/* dot 3*/			"swap.w %%d5					\n\t"			"move.w %%d5,%%d0				\n\t"		"cmp.l   #255,%%d0   				\n\t"  /* overflow? */		"bls.b   3f          				\n\t"  /* no: return value */		"spl.b   %%d0						\n\t"  /* yes: set low byte to appropriate boundary */		"3	:                    			\n\t"		/* save dot 3*/			"lsl.l  #8,%%d2					\n\t"			"move.b %%d0,%%d2					\n\t"		/* save dot 4*/				"lsl.l  #8,%%d2					\n\t"		"move.b %%d3,%%d2					\n\t"							/* writes 4 bytes */		"move.l %%d2,(%%a0)		\n\t"			/* dot 6 */			"move.w %%d6,%%d3				\n\t"		"cmp.l   #255,%%d3   			\n\t"		"bls.b   6f          			\n\t"		"spl.b   %%d3					\n\t"  		"6	:                    		\n\t"						/* dot 5 */		"swap.w %%d6					\n\t"			"move.w %%d6,%%d0				\n\t"		"cmp.l	#255,%%d0   			\n\t"		"bls.b  5f          			\n\t"		"spl.b  %%d0					\n\t"  		"5	:                    		\n\t"				/* save dot 5*/			"move.b %%d0,%%d2				\n\t"		/* save dot 6*/									"lsl.l  #8,%%d2					\n\t"		"move.b %%d3,%%d2				\n\t"					/* dot 8*/			"move.w %%d7,%%d3				\n\t"		"cmp.l   #255,%%d3   			\n\t"		"bls.b   8f         	 		\n\t"		"spl.b   %%d3					\n\t"  		"8	:  		                  	\n\t"		/* dot 7*/			"swap.w %%d7					\n\t"			"move.w %%d7,%%d0				\n\t"		"cmp.l   #255,%%d0   			\n\t"		"bls.b   7f          			\n\t"		"spl.b   %%d0					\n\t"  		"7	:                    		\n\t"		/* save dot 7*/			"lsl.l  #8,%%d2					\n\t"		"move.b %%d0,%%d2				\n\t"		/* save dot 8*/					"lsl.l  #8,%%d2					\n\t"		"move.b %%d3,%%d2				\n\t"					/* write to dest */			"move.l %%d2,(4,%%a0)		\n\t"				/* clear row, address +16 */			"move.l #0,(%[block])+		\n\t"		"move.l #0,(%[block])+		\n\t"		"move.l #0,(%[block])+		\n\t"		"move.l #0,(%[block])+		\n\t"				/* next line, address +stride */			"add.l	%[stride],%%a0					\n\t"			"sub.l	#1,%%d1							\n\t"				"bne 	foradd							\n\t"			/* for end */		"sub.l	#128,%[block]					\n\t"				:		:	[block]"a"(block),[dest]"a"(dest),[stride]"a"(stride)		:	"%a0","%d0","%d1","%d2","%d3","%d4","%d5","%d6","%d7"	);} #endif#ifdef CPU_COLDFIREstatic  void clip_block_to_dest_add(int16_t * block, uint8_t * dest,const int stride){	asm volatile (				"move.l %[dest],%%a0					\n\t"		/* init loop for i=0 to 7 */			"move.l #8,%%d1							\n\t"		"clr.l %%d2								\n\t"		"foradd2:								\n\t"				"movem.l (%%a0),%%d4-%%d5					\n\t"		"movem.l (%[block]),%%d6-%%d7/%%a1-%%a2		\n\t"			/* dot 4 */		"move.w %%d7,%%d0				\n\t"		"ext.l %%d0						\n\t"			"move.b %%d4,%%d2				\n\t"		"add.l 	%%d2,%%d0				\n\t"		"cmp.l  #255,%%d0   			\n\t"		"bls.b  4f          			\n\t"		"spl.b  %%d0					\n\t"  		"4	:                    		\n\t"		"move.b %%d0,%%d3				\n\t"					/* dot 3 */		"swap.w %%d7					\n\t"			"ext.l %%d7						\n\t"		"lsr.l  #8,%%d4					\n\t"			"move.b %%d4,%%d2				\n\t"		"add.l 	%%d2,%%d7				\n\t"		"cmp.l  #255,%%d7   			\n\t"		"bls.b  3f          			\n\t"		"spl.b  %%d7					\n\t"  		"3	:                    		\n\t"		"lsl.l  #8,%%d3					\n\t"		"move.b %%d7,%%d3				\n\t"			/* dot 2 */		"move.w %%d6,%%d0				\n\t"		"ext.l %%d0						\n\t"			"lsr.l  #8,%%d4					\n\t"			"move.b %%d4,%%d2				\n\t"		"add.l 	%%d2,%%d0				\n\t"		"cmp.l  #255,%%d0   			\n\t"		"bls.b  2f          			\n\t"		"spl.b  %%d0					\n\t"  		"2	:                    		\n\t"		"lsl.l  #8,%%d3					\n\t"		"move.b %%d0,%%d3				\n\t"					/* dot 1 */		"swap.w %%d6					\n\t"			"ext.l %%d6						\n\t"		"lsr.l  #8,%%d4					\n\t"			"move.b %%d4,%%d2				\n\t"		"add.l 	%%d2,%%d6				\n\t"		"cmp.l  #255,%%d6   			\n\t"		"bls.b  1f          			\n\t"		"spl.b  %%d6					\n\t"  		"1	:                    		\n\t"		"lsl.l  #8,%%d3					\n\t"		"move.b %%d6,%%d3				\n\t"				"move.l  #0x00FF00FF,%%d7		\n\t"  /* val  = ABCD */        "and.l   %%d3,%%d7	  			\n\t"  /* mask = .B.D */        "eor.l   %%d7,%%d3	  			\n\t"  /* val  = A.C. */        "lsl.l   #8,%%d7		  		\n\t"  /* mask = B.D. */        "lsr.l   #8,%%d3			  	\n\t"  /* val  = .A.C */        "or.l    %%d7,%%d3	  			\n\t"  /* val  = BADC */        "swap    %%d3	          		\n\t"  /* val  = DCBA */					/* writes 4 bytes */		"move.l %%d3,(%%a0)		\n\t"					/* dot 8 */		"move.l %%a2,%%d0				\n\t"		"ext.l %%d0						\n\t"			"move.b %%d5,%%d2				\n\t"		"add.l 	%%d2,%%d0				\n\t"		"cmp.l  #255,%%d0   			\n\t"		"bls.b  8f          			\n\t"		"spl.b  %%d0					\n\t"  		"8	:                    		\n\t"		"move.b %%d0,%%d3				\n\t"					/* dot 7 */		"move.l %%a2,%%d0				\n\t"			"swap	%%d0					\n\t"			"ext.l %%d0						\n\t"		"lsr.l  #8,%%d5					\n\t"			"move.b %%d5,%%d2				\n\t"		"add.l 	%%d2,%%d0				\n\t"		"cmp.l  #255,%%d0   			\n\t"		"bls.b  7f          			\n\t"		"spl.b  %%d0					\n\t"  		"7	:                    		\n\t"		"lsl.l  #8,%%d3					\n\t"		"move.b %%d0,%%d3				\n\t"			/* dot 6 */		"move.l %%a1,%%d0				\n\t"		"ext.l %%d0						\n\t"			"lsr.l  #8,%%d5					\n\t"			"move.b %%d5,%%d2				\n\t"		"add.l 	%%d2,%%d0				\n\t"		"cmp.l  #255,%%d0   			\n\t"		"bls.b  6f          			\n\t"		"spl.b  %%d0					\n\t"  		"6	:                    		\n\t"		"lsl.l  #8,%%d3					\n\t"		"move.b %%d0,%%d3				\n\t"					/* dot 5 */		"move.l %%a1,%%d0				\n\t"		"swap	%%d0					\n\t"			"ext.l %%d0						\n\t"		"lsr.l  #8,%%d5					\n\t"			"move.b %%d5,%%d2				\n\t"		"add.l 	%%d2,%%d0				\n\t"		"cmp.l  #255,%%d0   			\n\t"		"bls.b  5f          			\n\t"		"spl.b  %%d0					\n\t"  		"5	:                    		\n\t"		"lsl.l  #8,%%d3					\n\t"		"move.b %%d0,%%d3				\n\t"				"move.l  #0x00FF00FF,%%d7		\n\t"  /* val  = ABCD */        "and.l   %%d3,%%d7	  			\n\t"  /* mask = .B.D */        "eor.l   %%d7,%%d3	  			\n\t"  /* val  = A.C. */        "lsl.l   #8,%%d7		  		\n\t"  /* mask = B.D. */        "lsr.l   #8,%%d3			  	\n\t"  /* val  = .A.C */        "or.l    %%d7,%%d3	  			\n\t"  /* val  = BADC */        "swap    %%d3	          		\n\t"  /* val  = DCBA */								/* writes 4 bytes */		"move.l %%d3,(4,%%a0)		\n\t"					/* clear row, address +16 */			"move.l #0,(%[block])+		\n\t"		"move.l #0,(%[block])+		\n\t"		"move.l #0,(%[block])+		\n\t"		"move.l #0,(%[block])+		\n\t"				/* next line, address +stride */			"add.l	%[stride],%%a0		\n\t"			"sub.l	#1,%%d1					\n\t"					"bne 	foradd2						\n\t"			/* for end */		"sub.l	#128,%[block]					\n\t"					:		:	[block]"a"(block),[dest]"a"(dest),[stride]"a"(stride)		:	"%a0","%a1","%a2","%d0","%d1","%d2","%d3","%d4","%d5","%d6","%d7"	);} #endif