@@ -58,27 +58,28 @@ PYTHONPATHS = $(RVV_INTRINSIC_GEN_PATH):$(ABS_VENDOR_PATH)
5858PY3 := PYTHONPATH=$$PYTHONPATH:$(PYTHONPATHS ) python3
5959# Main entry script of the generator
6060MAIN := rvv_intrinsic_gen.main
61- # BFloat16 instruction scripts
62- BF16_INST := $(RVV_INTRINSIC_GEN_PATH ) /bfloat16_inst.py
6361# Script to clang-format the auto-generated adoc files
6462CLANG_FORMAT_ADOC = clang_format_autogen
6563# Extra flags specified when calling rvv_intrinsic_gen.main
6664EXTRA_FLAG :=
6765# Main output directory is default to auto-generated
6866OUTPUT_DIR := ../auto-generated
67+ # Types of intrinsics
68+ TYPES = default bf16 vector-crypto
6969# Derives output directory for each set of intrinsics
7070# Output directory for non-policy intrinsics
7171DIR := $(abspath $(OUTPUT_DIR ) )
72+ DIR_default = $(DIR )
7273# Output directory for policy intrinsics
73- POLICY_DIR : = $(DIR ) /policy_funcs
74+ POLICY_DIR_default = $(DIR ) /policy_funcs
7475# Output directory for bfloat16 non-policy intrinsics
75- BF16_DIR : = $(DIR ) /bfloat16
76+ DIR_bf16 = $(DIR ) /bfloat16
7677# Output directory for bfloat16 policy intrinsics
77- BF16_POLICY_DIR : = $(BF16_DIR ) /policy_funcs
78+ POLICY_DIR_bf16 = $(DIR_bf16 ) /policy_funcs
7879# Output directory for vector-crypto non-policy intrinsics
79- VECTOR_CRYPTO_DIR : = $(DIR ) /vector-crypto
80+ DIR_vector-crypto = $(DIR ) /vector-crypto
8081# Output directory for vector-crypto policy intrinsics
81- VECTOR_CRYPTO_POLICY_DIR : = $(VECTOR_CRYPTO_DIR ) /policy_funcs
82+ POLICY_DIR_vector-crypto = $(DIR_vector-crypto ) /policy_funcs
8283# Directory that stores the v0.10 unit tests
8384LEGACY_API_TESTS_DIR := $(abspath ../legacy-api-unit-tests)
8485# Derived variable to trigger option --vendor-inst
@@ -99,6 +100,12 @@ GNU_TOOLCHAIN_DIR :=
99100GCC_CASES_DIR := $(GNU_TOOLCHAIN_DIR ) /gcc/gcc/testsuite/gcc.target/riscv/rvv/gcc-auto-generated
100101# Directory that stores the g++ cases
101102G++_CASES_DIR := $(GNU_TOOLCHAIN_DIR ) /gcc/gcc/testsuite/g++.target/riscv/rvv/g++-auto-generated
103+ # Flags for different variants
104+ FLAGS_default =
105+ FLAGS_bf16 = --skip-default-inst --vendor-inst $(RVV_INTRINSIC_GEN_PATH ) /bfloat16_inst.py
106+ FLAGS_vector-crypto = --gen-vector-crypto
107+ # Commit header
108+ COMMIT_MSG_PREFIX = [Auto-gen]
102109
103110# ##############################################################################
104111# Functions
@@ -186,116 +193,112 @@ else
186193all : gen-document gen-test gen-compatible-header bf16-all vector-crypto-all
187194endif
188195
196+ default-all : gen-document gen-test
189197bf16-all : gen-bf16-document gen-bf16-test
190198vector-crypto-all : gen-vector-crypto-document gen-vector-crypto-test
191199
200+ # Document generation targets
192201gen-document : non-overloaded-doc non-overloaded-docs overloaded-doc overloaded-docs
193202gen-bf16-document : bf16-non-overloaded-doc bf16-non-overloaded-docs bf16-overloaded-doc bf16-overloaded-docs
194203gen-vector-crypto-document : vector-crypto-non-overloaded-doc vector-crypto-non-overloaded-docs vector-crypto-overloaded-doc vector-crypto-overloaded-docs
204+
205+ # Test generation targets
195206gen-test : non-overloaded-test overloaded-test gen-llvm-test gen-gnu-test
196207gen-bf16-test : bf16-non-overloaded-test bf16-overloaded-test gen-bf16-llvm-test
197208gen-vector-crypto-test : vector-crypto-non-overloaded-test vector-crypto-overloaded-test gen-vector-crypto-llvm-test
198- gen-compatible-header : non-policy-compatible-header policy-compatible-header non-policy-overloaded-compatible-header policy-overloaded-compatible-header
209+
210+ # Toolchain-specific test targets
199211gen-llvm-test : llvm-non-overloaded-test llvm-overloaded-test
200212gen-bf16-llvm-test : bf16-llvm-non-overloaded-test bf16-llvm-overloaded-test
201213gen-vector-crypto-llvm-test : vector-crypto-llvm-non-overloaded-test vector-crypto-llvm-overloaded-test
202214gen-gnu-test : gnu-overloaded-test gnu-non-overloaded-test
203215
204- # Generate all-in-one document for non-overloaded intrinsics
216+ # Generate compatible headers
217+ gen-compatible-header : non-policy-compatible-header policy-compatible-header non-policy-overloaded-compatible-header policy-overloaded-compatible-header
218+
219+ # Document generation rules - default variant
205220non-overloaded-doc :
206- $(call gen_doc_rule,$(DIR ) ,intrinsic_funcs.adoc,,$(POLICY_DIR ) )
221+ $(call gen_doc_rule,$(DIR_default ) ,intrinsic_funcs.adoc,$( FLAGS_default ) ,$(POLICY_DIR_default ) )
207222
208- # Generate grouped documents for non-overloaded intrinsics
209223non-overloaded-docs :
210- $(call gen_docs_rule,$(DIR ) ,intrinsic_funcs,,$(POLICY_DIR ) )
224+ $(call gen_docs_rule,$(DIR_default ) ,intrinsic_funcs,$( FLAGS_default ) ,$(POLICY_DIR_default ) )
211225
212- # Generate all-in-one document for overloaded intrinsics
213226overloaded-doc :
214- $(call gen_doc_rule,$(DIR ) ,overloaded_intrinsic_funcs.adoc,,$(POLICY_DIR ) )
227+ $(call gen_doc_rule,$(DIR_default ) ,overloaded_intrinsic_funcs.adoc,$( FLAGS_default ) ,$(POLICY_DIR_default ) )
215228
216- # Generate grouped documents for overloaded intrinsics
217229overloaded-docs :
218- $(call gen_docs_rule,$(DIR ) ,overloaded_intrinsic_funcs,,$(POLICY_DIR ) )
230+ $(call gen_docs_rule,$(DIR_default ) ,overloaded_intrinsic_funcs,$(FLAGS_default ) ,$(POLICY_DIR_default ) )
231+
232+ # Document generation rules - bf16 variant
233+ bf16-non-overloaded-doc :
234+ $(call gen_doc_rule,$(DIR_bf16 ) ,intrinsic_funcs.adoc,$(FLAGS_bf16 ) ,$(POLICY_DIR_bf16 ) )
235+
236+ bf16-non-overloaded-docs :
237+ $(call gen_docs_rule,$(DIR_bf16 ) ,intrinsic_funcs,$(FLAGS_bf16 ) ,$(POLICY_DIR_bf16 ) )
238+
239+ bf16-overloaded-doc :
240+ $(call gen_doc_rule,$(DIR_bf16 ) ,overloaded_intrinsic_funcs.adoc,$(FLAGS_bf16 ) ,$(POLICY_DIR_bf16 ) )
219241
220- # Generate non-overloaded intrinsic testing C source files
242+ bf16-overloaded-docs :
243+ $(call gen_docs_rule,$(DIR_bf16 ) ,overloaded_intrinsic_funcs,$(FLAGS_bf16 ) ,$(POLICY_DIR_bf16 ) )
244+
245+ # Document generation rules - vector-crypto variant
246+ vector-crypto-non-overloaded-doc :
247+ $(call gen_doc_rule,$(DIR_vector-crypto ) ,intrinsic_funcs.adoc,$(FLAGS_vector-crypto ) ,$(POLICY_DIR_vector-crypto ) )
248+
249+ vector-crypto-non-overloaded-docs :
250+ $(call gen_docs_rule,$(DIR_vector-crypto ) ,intrinsic_funcs,$(FLAGS_vector-crypto ) ,$(POLICY_DIR_vector-crypto ) )
251+
252+ vector-crypto-overloaded-doc :
253+ $(call gen_doc_rule,$(DIR_vector-crypto ) ,overloaded_intrinsic_funcs.adoc,$(FLAGS_vector-crypto ) ,$(POLICY_DIR_vector-crypto ) )
254+
255+ vector-crypto-overloaded-docs :
256+ $(call gen_docs_rule,$(DIR_vector-crypto ) ,overloaded_intrinsic_funcs,$(FLAGS_vector-crypto ) ,$(POLICY_DIR_vector-crypto ) )
257+
258+ # Test generation rules - default variant with different toolchains
221259non-overloaded-test :
222- $(call gen_test_rule,$(DIR ) /api-testing,non-overloaded-test,--toolchain-type=unknown,$(POLICY_DIR ) /api-testing)
260+ $(call gen_test_rule,$(DIR_default ) /api-testing,non-overloaded-test,--toolchain-type=unknown $( FLAGS_default ) ,$(POLICY_DIR_default ) /api-testing)
223261
224- # Generate overloaded intrinsic testing C source files
225262overloaded-test :
226- $(call gen_test_rule,$(DIR ) /overloaded-api-testing,overloaded-test,--toolchain-type=unknown,$(POLICY_DIR ) /overloaded-api-testing)
263+ $(call gen_test_rule,$(DIR_default ) /overloaded-api-testing,overloaded-test,--toolchain-type=unknown $( FLAGS_default ) ,$(POLICY_DIR_default ) /overloaded-api-testing)
227264
228- # Generate non-overloaded intrinsic testing C source files
229265llvm-non-overloaded-test :
230- $(call gen_test_rule,$(DIR ) /llvm-api-tests,non-overloaded-test,--toolchain-type=llvm,$(POLICY_DIR ) /llvm-api-tests)
266+ $(call gen_test_rule,$(DIR_default ) /llvm-api-tests,non-overloaded-test,--toolchain-type=llvm $( FLAGS_default ) ,$(POLICY_DIR_default ) /llvm-api-tests)
231267
232- # Generate overloaded intrinsic testing C source files
233268llvm-overloaded-test :
234- $(call gen_test_rule,$(DIR ) /llvm-overloaded-tests,overloaded-test,--toolchain-type=llvm,$(POLICY_DIR ) /llvm-overloaded-tests)
269+ $(call gen_test_rule,$(DIR_default ) /llvm-overloaded-tests,overloaded-test,--toolchain-type=llvm $( FLAGS_default ) ,$(POLICY_DIR_default ) /llvm-overloaded-tests)
235270
236- # Generate GNU non-overloaded intrinsic testing source files
237271gnu-non-overloaded-test :
238- $(call gen_test_rule,$(DIR ) /gnu-api-tests,non-overloaded-test,--toolchain-type=gnu,$(POLICY_DIR ) /gnu-api-tests)
272+ $(call gen_test_rule,$(DIR_default ) /gnu-api-tests,non-overloaded-test,--toolchain-type=gnu $( FLAGS_default ) ,$(POLICY_DIR_default ) /gnu-api-tests)
239273
240- # Generate GNU overloaded intrinsic testing source files
241274gnu-overloaded-test :
242- $(call gen_test_rule,$(DIR ) /gnu-overloaded-tests,overloaded-test,--toolchain-type=gnu,$(POLICY_DIR ) /gnu-overloaded-tests)
243-
244- # BFloat16 documents
245- bf16-non-overloaded-doc :
246- $(call gen_doc_rule,$(BF16_DIR ) ,intrinsic_funcs.adoc,--skip-default-inst --vendor-inst $(BF16_INST ) ,$(BF16_POLICY_DIR ) )
275+ $(call gen_test_rule,$(DIR_default ) /gnu-overloaded-tests,overloaded-test,--toolchain-type=gnu $(FLAGS_default ) ,$(POLICY_DIR_default ) /gnu-overloaded-tests)
247276
248- bf16-non-overloaded-docs :
249- $(call gen_docs_rule,$(BF16_DIR ) ,intrinsic_funcs,--skip-default-inst --vendor-inst $(BF16_INST ) ,$(BF16_POLICY_DIR ) )
250-
251- bf16-overloaded-doc :
252- $(call gen_doc_rule,$(BF16_DIR ) ,overloaded_intrinsic_funcs.adoc,--skip-default-inst --vendor-inst $(BF16_INST ) ,$(BF16_POLICY_DIR ) )
253-
254- bf16-overloaded-docs :
255- $(call gen_docs_rule,$(BF16_DIR ) ,overloaded_intrinsic_funcs,--skip-default-inst --vendor-inst $(BF16_INST ) ,$(BF16_POLICY_DIR ) )
256-
257- # BFloat16 tests
258- # Generate non-overloaded intrinsic testing C source files
277+ # Test generation rules - bf16 variant with different toolchains
259278bf16-non-overloaded-test :
260- $(call gen_test_rule,$(BF16_DIR ) /api-testing,non-overloaded-test,--skip-default-inst --vendor-inst $( BF16_INST ) -- toolchain-type=unknown,$(BF16_POLICY_DIR ) /api-testing)
279+ $(call gen_test_rule,$(DIR_bf16 ) /api-testing,non-overloaded-test,--toolchain-type=unknown $( FLAGS_bf16 ) ,$(POLICY_DIR_bf16 ) /api-testing)
261280
262- # Generate overloaded intrinsic testing C source files
263281bf16-overloaded-test :
264- $(call gen_test_rule,$(BF16_DIR ) /overloaded-api-testing,overloaded-test,--skip-default-inst --vendor-inst $( BF16_INST ) -- toolchain-type=unknown,$(BF16_POLICY_DIR ) /overloaded-api-testing)
282+ $(call gen_test_rule,$(DIR_bf16 ) /overloaded-api-testing,overloaded-test,--toolchain-type=unknown $( FLAGS_bf16 ) ,$(POLICY_DIR_bf16 ) /overloaded-api-testing)
265283
266- # Generate non-overloaded intrinsic testing C source files
267284bf16-llvm-non-overloaded-test :
268- $(call gen_test_rule,$(BF16_DIR ) /llvm-api-tests,non-overloaded-test,--skip-default-inst --vendor-inst $( BF16_INST ) -- toolchain-type=llvm,$(BF16_POLICY_DIR ) /llvm-api-tests)
285+ $(call gen_test_rule,$(DIR_bf16 ) /llvm-api-tests,non-overloaded-test,--toolchain-type=llvm $( FLAGS_bf16 ) ,$(POLICY_DIR_bf16 ) /llvm-api-tests)
269286
270- # Generate overloaded intrinsic testing C source files
271287bf16-llvm-overloaded-test :
272- $(call gen_test_rule,$(BF16_DIR ) /llvm-overloaded-tests,overloaded-test,--skip-default-inst --vendor-inst $( BF16_INST ) -- toolchain-type=llvm,$(BF16_POLICY_DIR ) /llvm-overloaded-tests)
288+ $(call gen_test_rule,$(DIR_bf16 ) /llvm-overloaded-tests,overloaded-test,--toolchain-type=llvm $( FLAGS_bf16 ) ,$(POLICY_DIR_bf16 ) /llvm-overloaded-tests)
273289
274- # Vector crypto documents
275- vector-crypto-non-overloaded-doc :
276- $(call gen_doc_rule,$(VECTOR_CRYPTO_DIR ) ,intrinsic_funcs.adoc,--gen-vector-crypto,$(VECTOR_CRYPTO_POLICY_DIR ) )
277-
278- vector-crypto-non-overloaded-docs :
279- $(call gen_docs_rule,$(VECTOR_CRYPTO_DIR ) ,intrinsic_funcs,--gen-vector-crypto,$(VECTOR_CRYPTO_POLICY_DIR ) )
280-
281- vector-crypto-overloaded-doc :
282- $(call gen_doc_rule,$(VECTOR_CRYPTO_DIR ) ,overloaded_intrinsic_funcs.adoc,--gen-vector-crypto,$(VECTOR_CRYPTO_POLICY_DIR ) )
283-
284- vector-crypto-overloaded-docs :
285- $(call gen_docs_rule,$(VECTOR_CRYPTO_DIR ) ,overloaded_intrinsic_funcs,--gen-vector-crypto,$(VECTOR_CRYPTO_POLICY_DIR ) )
286-
287- # Vector-crypto tests
290+ # Test generation rules - vector-crypto variant with different toolchains
288291vector-crypto-non-overloaded-test :
289- $(call gen_test_rule,$(VECTOR_CRYPTO_DIR ) /api-testing,non-overloaded-test,--gen-vector-crypto -- toolchain-type=unknown, $(VECTOR_CRYPTO_POLICY_DIR ) /api-testing)
292+ $(call gen_test_rule,$(DIR_vector-crypto ) /api-testing,non-overloaded-test,--toolchain-type=unknown $(FLAGS_vector-crypto ) , $( POLICY_DIR_vector-crypto ) /api-testing)
290293
291294vector-crypto-overloaded-test :
292- $(call gen_test_rule,$(VECTOR_CRYPTO_DIR ) /overloaded-api-testing,overloaded-test,--gen-vector-crypto -- toolchain-type=unknown, $(VECTOR_CRYPTO_POLICY_DIR ) /overloaded-api-testing)
295+ $(call gen_test_rule,$(DIR_vector-crypto ) /overloaded-api-testing,overloaded-test,--toolchain-type=unknown $(FLAGS_vector-crypto ) , $( POLICY_DIR_vector-crypto ) /overloaded-api-testing)
293296
294297vector-crypto-llvm-non-overloaded-test :
295- $(call gen_test_rule,$(VECTOR_CRYPTO_DIR ) /llvm-api-tests,non-overloaded-test,--gen-vector-crypto -- toolchain-type=llvm,$(VECTOR_CRYPTO_POLICY_DIR ) /llvm-api-tests)
298+ $(call gen_test_rule,$(DIR_vector-crypto ) /llvm-api-tests,non-overloaded-test,--toolchain-type=llvm $( FLAGS_vector-crypto ) ,$(POLICY_DIR_vector-crypto ) /llvm-api-tests)
296299
297300vector-crypto-llvm-overloaded-test :
298- $(call gen_test_rule,$(VECTOR_CRYPTO_DIR ) /llvm-overloaded-tests,overloaded-test,--gen-vector-crypto -- toolchain-type=llvm,$(VECTOR_CRYPTO_POLICY_DIR ) /llvm-overloaded-tests)
301+ $(call gen_test_rule,$(DIR_vector-crypto ) /llvm-overloaded-tests,overloaded-test,--toolchain-type=llvm $( FLAGS_vector-crypto ) ,$(POLICY_DIR_vector-crypto ) /llvm-overloaded-tests)
299302
300303# ##############################################################################
301304
@@ -325,12 +328,12 @@ gen-all:
325328 rm -rf ${DIR}
326329 make all OUTPUT_DIR=${OUTPUT_DIR}
327330
328- # Define common variables
329- TYPES = default bf16 vector-crypto
330- DIR_default = ${DIR}
331- DIR_bf16 = ${BF16_DIR}
332- DIR_vector-crypto = ${VECTOR_CRYPTO_DIR}
333- COMMIT_MSG_PREFIX = [Auto-gen]
331+ # ##############################################################################
332+ # Auto-commit re-generated Document / Test Targets
333+ # ##############################################################################
334+ git-commit-all : git-commit-default-all
335+ git-commit-autogen-doc : git-commit-autogen-default-doc
336+ git-commit-autogen-test : git-commit-autogen-default-test
334337
335338# Generic update and commit target for docs
336339git-commit-autogen-% -doc :
@@ -359,16 +362,11 @@ git-commit-%-all:
359362 make git-commit-autogen-$(TYPE_PREFIX ) doc OUTPUT_DIR=${OUTPUT_DIR}
360363 make git-commit-autogen-$(TYPE_PREFIX ) test OUTPUT_DIR=${OUTPUT_DIR}
361364
362- # Provide backward compatibility aliases
363- git-commit-all : git-commit-default-all
364- git-commit-autogen-doc : git-commit-autogen-default-doc
365- git-commit-autogen-test : git-commit-autogen-default-test
366-
367- # Update and commit compatible headers (kept as-is since it doesn't follow the pattern)
365+ # Update and commit compatible headers
368366git-commit-autogen-compatible-header :
369367 make gen-compatible-header
370368 git add $(DIR ) /*
371- git commit -m " $( COMMIT_MSG_PREFIX) Update tests under ${OUTPUT_DIR} . (make git-commit-autogen-compatible-header )"
369+ git commit -m " $( COMMIT_MSG_PREFIX) Update compatible header under ${OUTPUT_DIR} . (make $@ )"
372370
373371# Runs diff with auto-generated, requires ${TEST_DIR} to be provided.
374372GOLDEN_DIR = ${DIR}
0 commit comments