mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 11:39:53 +00:00
rules.mak: speedup save-vars load-vars
Unnesting variables spends a lot of time parsing and executing foreach and if functions. Because actually very few variables have to be saved and restored, a good strategy is to remember what has to be done in load-vars, and only iterate the right variables in load-vars. For save-vars, unroll the foreach loop to provide another small improvement. This speeds up a "noop" build from around 15.5 seconds on my laptop to 11.7 (25% roughly). Reviewed-by: Fam Zheng <famz@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
eb7a20a361
commit
5ffb350541
22
rules.mak
22
rules.mak
@ -192,15 +192,15 @@ clean: clean-timestamp
|
||||
# save-vars
|
||||
# Usage: $(call save-vars, vars)
|
||||
# Save each variable $v in $vars as save-vars-$v, save their object's
|
||||
# variables, then clear $v.
|
||||
# variables, then clear $v. saved-vars-$v contains the variables that
|
||||
# where saved for the objects, in order to speedup load-vars.
|
||||
define save-vars
|
||||
$(foreach v,$1,
|
||||
$(eval save-vars-$v := $(value $v))
|
||||
$(foreach o,$($v),
|
||||
$(foreach k,cflags libs objs,
|
||||
$(if $($o-$k),
|
||||
$(eval save-vars-$o-$k := $($o-$k))
|
||||
$(eval $o-$k := ))))
|
||||
$(eval saved-vars-$v := $(foreach o,$($v), \
|
||||
$(if $($o-cflags), $o-cflags $(eval save-vars-$o-cflags := $($o-cflags))$(eval $o-cflags := )) \
|
||||
$(if $($o-libs), $o-libs $(eval save-vars-$o-libs := $($o-libs))$(eval $o-libs := )) \
|
||||
$(if $($o-objs), $o-objs $(eval save-vars-$o-objs := $($o-objs))$(eval $o-objs := ))))
|
||||
$(eval $v := ))
|
||||
endef
|
||||
|
||||
@ -213,12 +213,10 @@ define load-vars
|
||||
$(eval $2-new-value := $(value $2))
|
||||
$(foreach v,$1,
|
||||
$(eval $v := $(value save-vars-$v))
|
||||
$(foreach o,$($v),
|
||||
$(foreach k,cflags libs objs,
|
||||
$(if $(save-vars-$o-$k),
|
||||
$(eval $o-$k := $(save-vars-$o-$k))
|
||||
$(eval save-vars-$o-$k := ))))
|
||||
$(eval save-vars-$v := ))
|
||||
$(foreach o,$(saved-vars-$v),
|
||||
$(eval $o := $(save-vars-$o)) $(eval save-vars-$o := ))
|
||||
$(eval save-vars-$v := )
|
||||
$(eval saved-vars-$v := ))
|
||||
$(eval $2 := $(value $2) $($2-new-value))
|
||||
endef
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user