1

C'est valable pour vat.asm, mais aussi probablement pour d'autres endroits, vu ce que raconte grep :
	cmpi.b	#'A'-1,d1		; 'A' -> 'Z' | 'a' -> 'z'
	bls.s	\End
	cmpi.b	#'Z',d1
	bls.s	\loop
	cmpi.b	#'a'-1,d1
	bls.s	\End
	cmpi.b	#'z',d1
	bhi.s	\End


=>

\upper:	cmpi.b	#'A'-1,d1		; 'A' -> 'Z' | 'a' -> 'z'
	bls.s	\End
	cmpi.b	#'Z',d1
	bls.s	\loop
	bclr.l	#5,d1
	bne.s	\upper
	bra.s	\End


4 octets finger in the noze embarrassed

Sinon, pourquoi comparer 'A'-1 et non 'A' ? T'es fâché avec bcs ? grin

2

Folco (./1) :
4 octets finger in the noze


Tu peux encore gagner 2 cotets tongue
Folco (./1) :
Sinon, pourquoi comparer 'A'-1 et non 'A' ? T'es fâché avec bcs ?


Je sais plus !

3

PpHd (./2) :
Tu peux encore gagner 2 cotets

t1 tu seras toujours plus fort que moi c'est à désespérer crygrin

Tu penses à virer le bra \End et faire un bra \upper ? ^^

edit -> Erf, non, ça marcherait pas, on aurait une infinite loop pour d1 > Z, alors je vois pas !!! cry

J'ai juste une version plus l33t :
\upper:	cmpi.b	#'A'-1,d1		; 'A' -> 'Z' | 'a' -> 'z'
	bls.s	\End
	cmpi.b	#'Z'+1,d1
	bclr.l	#5,d1
	bcs.s	\loop
	bne.s	\upper
	bra.s	\End

Voilà, c'est la leçon numéro 8 de "Le code imbitable pour les nuls", ça me plait bien embarrassed

4

cry

Voilà ce que ça donne, chez moi, au final :
ValidateSymbolName
StrCommonSymbolsChars:	dc.b	"-"
StrFirstSymbolsChar:	dc.b	"\_@:.",0
StrLettersAndFigures:	dc.b	"09"
StrLetters:		dc.b	"AZaz",0
;===============================================================================
;
;	ValidateSymbolName
;
;	in	a0	char* str
;		fp	Stack frame
;
;	out	d0.w	Number of valid chars
;
;	destroy	d0.w
;
;===============================================================================

ValidateSymbolName:

	movem.l	d1/a0-a2,-(sp)

	;----------------------------------------------------------------------
	;	First char may be \ _ @ : . A-Z a-z
	;----------------------------------------------------------------------

	move.b	(a0)+,d0
	lea	StrFirstSymbolsChars(pc),a1
	lea	StrLetters(pc),a2
	bsr	\CheckCharsAndIntervals
	bne.s	\End

	;----------------------------------------------------------------------
	;	Other chars may be \ _ @ : . A-Z a-z 0-9 -
	;----------------------------------------------------------------------

\NextChar:
	lea	StrCommonSymbolsChars(pc),a1
	lea	StrLettersAndFigures(pc),a2
	bsr	\CheckCharsAndIntervals
	beq.s	\NextChar

	;----------------------------------------------------------------------
	;	Remove trailing ':' and return the number of valid chars
	;----------------------------------------------------------------------

\End:	move.l	(sp)+,d1
\Loop:	subq.l	#1,a0				; Point to the first invalid char
	cmp.l	(sp),a0				; Return if it is the beginning of the string
	beq.s	\Ret
	cmpi.b	#':',-1(a0)			; Remove the last valid char if it is ':'
	beq.s	\Loop

\Ret:	suba.l	(sp),a0
	move.w	a0,d0
	movem.l	(sp)+,a0-a2
	rts

	;----------------------------------------------------------------------
	;	Check for chars and intervals
	;----------------------------------------------------------------------

\CheckCharsAndIntervals:			; Return Z-Flag == 1 if found, else 0
	move.b	(a1)+,d1
	beq.s	\CheckIntervals
	cmp.b	d0,d1
	bne.s	\CheckCharsAndIntervals
\Found:	moveq.l	#0,d0
	rts

\CheckIntervals:
	move.b	(a2)+,d1
	beq.s	\NotFound
	cmp.b	d1,d0
	bcs.s	\NotFound
	cmp.b	(a2)+,d0
	bls.s	\Found
	bra.s	\CheckIntervals

\NotFound:
	moveq.l	#1,d0
	rts

En fait, j'utilise jamais mes jolis tricks tsss

fun fact : A68k ne considère pas que les ':' en fin de symboles en fassent partie. Mais ils sont tolérés sur les labels, en nombre quelconque.
Donc :
abc:::: est un label valide, le symbole est 'abc'
abc::::: equ 2 est un equate valide, le symbole est 'abc'
bra label:::: est invalide

5

Folco (./3) :

t1 tu seras toujours plus fort que moi c'est à désespérer

Tu penses à virer le bra \End et faire un bra \upper ? ^^


	bclr.l	#5,d1
	cmpi.b	#'A'-1,d1		; 'A' -> 'Z' | 'a' -> 'z'
	bls.s	\End
	cmpi.b	#'Z',d1
	bls.s	\loop
	bra.s	\End

?

6

(cette optimisation est super connue, hein cheeky)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

7

PpHd -> ah ben là c'est même pas que t'es plus fort en optimisation, c'est juste que je suis complètement con couic Merci quand même

0² -> je me doute, je croyais avoir trouvé l'occasion d'utiliser le Z-flag sur un b***, et en fait même pas :/ Je sais, faut pas grand chose pour m'amuser en 68k grin