improve Xtensa multiplication and clz/ctz operations

Bob Wilson
Mon Nov 6 19:01:00 GMT 2006

This patch adds Xtensa versions of the macros in longlong.h, primarily to 
improve the performance of long long multiplication but also for count 
leading/trailing zero operations.  I ran the testsuite for 3 different Xtensa 
configurations with varying multiply hardware.  Committed on the mainline.

2006-11-06  Bob Wilson  <>

	* longlong.h (__xtensa__): Add definitions for umul_ppmm, __umulsidi3,
	count_leading_zeros, and count_trailing_zeros.
	* config/xtensa/xtensa.c (TARGET_INIT_BUILTINS): Define.
	(xtensa_init_builtins): New.
	(xtensa_fold_builtin): New.
	(xtensa_expand_builtin): New.
	(xtensa_rtx_costs): Add CTZ and CLZ.  Adjust costs for MULT.
	* config/xtensa/xtensa.h (TARGET_MUL32_HIGH): Define.
	* config/xtensa/ (UNSPEC_NSAU): Remove.
	(any_extend): New code macro.
	(u, su): New code attributes.
	(<u>mulsidi3, <u>mulsi3_highpart, clzsi2, ctzsi2): New.
	(nsau): Remove; replaced by clzsi2.
	(ffssi2): Use clzsi2.
	* config/xtensa/t-xtensa (LIB1ASMFUNCS): Add _umulsidi3,
	_clzsi2, _ctzsi2, and _ffssi2.  Rename _nsau to _clz.
	* config/xtensa/lib1funcs.asm (__mulsi3): Support Mul32 option.
	(__umulsidi3, __clzsi2, __ctzsi2, __ffssi2): New.
	(__nsau_data): Guard with ifdef L_clz instead of L_nsau.

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: gcc-mul32.patch
URL: <>

More information about the Gcc-patches mailing list