gnupic: Thread: SDCC pointers are working


[<<] [<] Page 1 of 1 [>] [>>]
Subject: SDCC pointers are working
From: Scott Dattalo ####@####.####
Date: 31 May 2002 04:33:34 -0000
Message-Id: <Pine.LNX.4.44.0205302116350.8118-100000@ruckus.brouhaha.com>


I normally wouldn't post such detailed progress to this list, but this is 
a follow up to the pointer bug report Bob posted to the list. For all of 
the cases I've tested, pointers and arrays "work". This has been checked 
into CVS.

I boiled the code down to the simplest case:

void index_by_pointer(unsigned char *index, unsigned char expected_value)
{

  if(buff[*index] != expected_value)
    failures++;

}

Two days ago this would cause SDCC to expose the core, whereas now it 
produces:

;;	-----------------------------------------
;;	 function index_by_pointer
;;	-----------------------------------------
_index_by_pointer	;Function start

;#CSRC	pointer1.c 93
;  void index_by_pointer(unsigned char *index, unsigned char 
expected_value)
	MOVWF	temp2	;key=000,flow seq=016
	MOVF	s0xFFF,W	;key=001,flow seq=016
	MOVWF	temp1	;key=002,flow seq=016
	MOVF	s0x1000,W	;key=003,flow seq=016
	MOVWF	r0x33	;key=004,flow seq=016

;#CSRC	pointer1.c 96
;  if(buff[*index] != expected_value)
	MOVF	temp1,W	;key=005,flow seq=016
	MOVWF	FSR	;key=006,flow seq=016
	MOVF	INDF,W	;key=007,flow seq=016
	MOVWF	r0x34	;key=008,flow seq=016
	MOVF	r0x34,W	;key=009,flow seq=016
	ADDLW	_buff	;key=00a,flow seq=016
	MOVWF	r0x35	;key=00b,flow seq=016
	MOVF	r0x35,W	;key=00c,flow seq=016
	MOVWF	FSR	;key=00d,flow seq=016
	MOVF	INDF,W	;key=00e,flow seq=016
	MOVWF	r0x36	;key=00f,flow seq=016
	MOVF	r0x36,W	;key=010,flow seq=016

;;peep 1 - test/jump to test/skip
;#CSRC	pointer1.c 97
;  failures++;
	XORWF	r0x33,W	;key=011,flow seq=016
	BTFSS	STATUS,2	;key=012,flow seq=016
	INCF	_failures,F	;key=000,flow seq=017
_00162_DS_
	RETURN		;key=001,flow seq=017

It's not what I'd call efficient, but it is correct. 

Scott


[<<] [<] Page 1 of 1 [>] [>>]


Powered by ezmlm-browse 0.20.