[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference turris::languages

Title:Languages
Notice:Speaking In Tongues
Moderator:TLE::TOKLAS::FELDMAN
Created:Sat Jan 25 1986
Last Modified:Wed May 21 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:394
Total number of notes:2683

387.0. "3way branch optimization" by RANGER::BRADLEY (Chuck Bradley) Wed Feb 15 1995 17:42

in a binary search, or while searching a binary tree, one needs to make
a 3 way comparison, <, =, or >.

decades ago, fortran provided this capability.

nowadays in c we write

	...
	if (p->key < soughtvalue)
		mumble
	else if (p->key > soughtvalue)
		whatever
	else
		somethingelse
	...

does your compiler do the comparison only once?
this is about any language, any implementaion, and any operating system.

that is, does it generate code something like

	indexed load of key to Rn
	compare Rn,soughtvalue
	BH	mumblelabel
	BL	whateverlabel
somethingelselabel:

or does it do something like this

	indexed load of key to Rn
	compare Rn,soughtvalue
	BH	mumblelabel
	indexed load of key to Rn
	compare Rn,soughtvalue
	BL	whateverlabel
somethingelselabel:


T.RTitleUserPersonal
Name
DateLines
387.1AUSSIE::GARSONachtentachtig kacheltjesThu Feb 16 1995 01:0811
    None of the following (on VAX) make the optimisation.
    
    DEC C V4.0-000
    VAX C V3.2-044
    PASCAL V4.3-76
    
    For numeric comparisons a "sign" function comes in handy. However
    string comparisons are where this optimisation is more helpful and in
    that case C's strcmp() at least allows the programmer to do the
    optimisation. [The compiler itself can't because it doesn't know what
    strcmp() is, at least traditionally.]