Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
176 changes: 64 additions & 112 deletions rvv-intrinsic-generator/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -132,13 +132,51 @@ define gen_docs
$(TRIGGER_VENDOR_INST) $(TRIGGER_SKIP_DEFAULT_INST)
endef

# Derive generator mode from the target name by stripping feature prefixes
mode_from_target = $(patsubst bf16-%,%,$(patsubst vector-crypto-%,%,$@))

define gen_doc_rule
$(call gen_doc,$(1),$(2),$(mode_from_target),$(3) $(EXTRA_FLAG))
$(call gen_doc,$(4),$(2),$(mode_from_target),--has-policy $(3) $(EXTRA_FLAG))
$(call clang_format_adoc, --file, $(1)/$(2))
$(call clang_format_adoc, --file, $(4)/$(2))
endef

define gen_docs_rule
$(call gen_docs,$(1),$(2),$(mode_from_target),$(3) $(EXTRA_FLAG))
$(call gen_docs,$(4),$(2),$(mode_from_target),--has-policy $(3) $(EXTRA_FLAG))
$(call clang_format_adoc, --folder, $(1)/$(2))
$(call clang_format_adoc, --folder, $(4)/$(2))
endef

define gen_tests
rm -f $(1)/*.c
$(PY3) -m $(MAIN) --gen $(2) \
--out $(1) $(3) \
$(TRIGGER_VENDOR_INST) $(TRIGGER_SKIP_DEFAULT_INST)
endef

# Helper to run clang-format over generated C files in a folder
define clang_format_c
clang-format -i $(1)/*.c
endef

define gen_test_rule
$(call gen_tests,$(1),$(2),$(3) $(EXTRA_FLAG))
$(call gen_tests,$(4),$(2),--has-policy $(3) $(EXTRA_FLAG))
$(if $(filter --toolchain-type gnu,$(3)),,$(call clang_format_c,$(1)))
$(if $(filter --toolchain-type gnu,$(3)),,$(call clang_format_c,$(4)))
endef

define gen_llvm_test_rule
$(call gen_tests,$(1),$(2),--toolchain-type llvm $(strip $(3)) $(EXTRA_FLAG))
$(call gen_tests,$(4),$(2),--toolchain-type llvm --has-policy $(strip $(3)) $(EXTRA_FLAG))
$(call replace_float, $(1))
$(call replace_float, $(4))
$(call clang_format_c,$(1))
$(call clang_format_c,$(4))
endef

# Compile all *.c under $(1) with $(2), then pretty-print with testing-report
# $(1): Path to testing folder, containing .c files
# $(2): Path to compiler
Expand Down Expand Up @@ -181,185 +219,99 @@ gen-gnu-test: gnu-overloaded-test gnu-non-overloaded-test

# Generate all-in-one document for non-overloaded intrinsics
non-overloaded-doc:
$(call gen_doc,$(DIR),intrinsic_funcs.adoc,$@,$(EXTRA_FLAG))
$(call gen_doc,$(POLICY_DIR),intrinsic_funcs.adoc,$@,--has-policy $(EXTRA_FLAG))
$(call clang_format_adoc, --file, $(DIR)/intrinsic_funcs.adoc)
$(call clang_format_adoc, --file, $(POLICY_DIR)/intrinsic_funcs.adoc)
$(call gen_doc_rule,$(DIR),intrinsic_funcs.adoc,,$(POLICY_DIR))

# Generate grouped documents for non-overloaded intrinsics
non-overloaded-docs:
$(call gen_docs,$(DIR),intrinsic_funcs,$@,$(EXTRA_FLAG))
$(call gen_docs,$(POLICY_DIR),intrinsic_funcs,$@,--has-policy $(EXTRA_FLAG))
$(call clang_format_adoc, --folder, $(DIR)/intrinsic_funcs)
$(call clang_format_adoc, --folder, $(POLICY_DIR)/intrinsic_funcs)
$(call gen_docs_rule,$(DIR),intrinsic_funcs,,$(POLICY_DIR))

# Generate all-in-one document for overloaded intrinsics
overloaded-doc:
$(call gen_doc,$(DIR),overloaded_intrinsic_funcs.adoc,$@,$(EXTRA_FLAG))
$(call gen_doc,$(POLICY_DIR),overloaded_intrinsic_funcs.adoc,$@,--has-policy $(EXTRA_FLAG))
$(call clang_format_adoc, --file, $(DIR)/overloaded_intrinsic_funcs.adoc)
$(call clang_format_adoc, --file, $(POLICY_DIR)/overloaded_intrinsic_funcs.adoc)
$(call gen_doc_rule,$(DIR),overloaded_intrinsic_funcs.adoc,,$(POLICY_DIR))

# Generate grouped documents for overloaded intrinsics
overloaded-docs:
$(call gen_docs,$(DIR),overloaded_intrinsic_funcs,$@,$(EXTRA_FLAG))
$(call gen_docs,$(POLICY_DIR),overloaded_intrinsic_funcs,$@,--has-policy $(EXTRA_FLAG))
$(call clang_format_adoc, --folder, $(DIR)/overloaded_intrinsic_funcs)
$(call clang_format_adoc, --folder, $(POLICY_DIR)/overloaded_intrinsic_funcs)
$(call gen_docs_rule,$(DIR),overloaded_intrinsic_funcs,,$(POLICY_DIR))

# Generate non-overloaded intrinsic testing C source files
non-overloaded-test:
$(call gen_tests,$(DIR)/api-testing,non-overloaded-test,$(EXTRA_FLAG))
$(call gen_tests,$(POLICY_DIR)/api-testing,non-overloaded-test,--has-policy $(EXTRA_FLAG))
clang-format -i $(DIR)/api-testing/*
clang-format -i $(POLICY_DIR)/api-testing/*
$(call gen_test_rule,$(DIR)/api-testing,non-overloaded-test,, $(POLICY_DIR)/api-testing)

# Generate overloaded intrinsic testing C source files
overloaded-test:
$(call gen_tests,$(DIR)/overloaded-api-testing,overloaded-test,$(EXTRA_FLAG))
$(call gen_tests,$(POLICY_DIR)/overloaded-api-testing,overloaded-test,--has-policy $(EXTRA_FLAG))
clang-format -i $(DIR)/overloaded-api-testing/*
clang-format -i $(POLICY_DIR)/overloaded-api-testing/*
$(call gen_test_rule,$(DIR)/overloaded-api-testing,overloaded-test,, $(POLICY_DIR)/overloaded-api-testing)

# Generate non-overloaded intrinsic testing C source files
llvm-non-overloaded-test:
$(call gen_tests,$(DIR)/llvm-api-tests,non-overloaded-test,--toolchain-type llvm $(EXTRA_FLAG))
$(call gen_tests,$(POLICY_DIR)/llvm-api-tests,non-overloaded-test,--toolchain-type llvm --has-policy $(EXTRA_FLAG))
$(call replace_float, $(DIR)/llvm-api-tests)
$(call replace_float, $(POLICY_DIR)/llvm-api-tests)
clang-format -i $(DIR)/llvm-api-tests/*
clang-format -i $(POLICY_DIR)/llvm-api-tests/*
$(call gen_llvm_test_rule,$(DIR)/llvm-api-tests,non-overloaded-test,,$(POLICY_DIR)/llvm-api-tests)

# Generate overloaded intrinsic testing C source files
llvm-overloaded-test:
$(call gen_tests,$(DIR)/llvm-overloaded-tests,overloaded-test,--toolchain-type llvm $(EXTRA_FLAG))
$(call gen_tests,$(POLICY_DIR)/llvm-overloaded-tests,overloaded-test,--toolchain-type llvm --has-policy $(EXTRA_FLAG))
$(call replace_float, $(DIR)/llvm-overloaded-tests)
$(call replace_float, $(POLICY_DIR)/llvm-overloaded-tests)
clang-format -i $(DIR)/llvm-overloaded-tests/*
clang-format -i $(POLICY_DIR)/llvm-overloaded-tests/*
$(call gen_llvm_test_rule,$(DIR)/llvm-overloaded-tests,overloaded-test,,$(POLICY_DIR)/llvm-overloaded-tests)

# Generate GNU non-overloaded intrinsic testing source files
gnu-non-overloaded-test:
$(call gen_tests,$(DIR)/gnu-api-tests,non-overloaded-test,--toolchain-type gnu)
$(call gen_tests,$(POLICY_DIR)/gnu-api-tests,non-overloaded-test,--toolchain-type gnu --has-policy)
$(call gen_test_rule,$(DIR)/gnu-api-tests,non-overloaded-test,--toolchain-type gnu,$(POLICY_DIR)/gnu-api-tests)

# Generate GNU overloaded intrinsic testing source files
gnu-overloaded-test:
$(call gen_tests,$(DIR)/gnu-overloaded-tests,overloaded-test,--toolchain-type gnu)
$(call gen_tests,$(POLICY_DIR)/gnu-overloaded-tests,overloaded-test,--toolchain-type gnu --has-policy)
$(call gen_test_rule,$(DIR)/gnu-overloaded-tests,overloaded-test,--toolchain-type gnu,$(POLICY_DIR)/gnu-overloaded-tests)

# BFloat16 documents
bf16-non-overloaded-doc:
$(call gen_doc, $(BF16_DIR),intrinsic_funcs.adoc,non-overloaded-doc,--skip-default-inst --vendor-inst $(BF16_INST))
$(call gen_doc, $(BF16_POLICY_DIR),intrinsic_funcs.adoc,non-overloaded-doc,--has-policy --skip-default-inst --vendor-inst $(BF16_INST))
$(call clang_format_adoc, --file, $(BF16_DIR)/intrinsic_funcs.adoc)
$(call clang_format_adoc, --file, $(BF16_POLICY_DIR)/intrinsic_funcs.adoc)
$(call gen_doc_rule,$(BF16_DIR),intrinsic_funcs.adoc,--skip-default-inst --vendor-inst $(BF16_INST),$(BF16_POLICY_DIR))

bf16-non-overloaded-docs:
$(call gen_doc, $(BF16_DIR),intrinsic_funcs,non-overloaded-docs,--skip-default-inst --vendor-inst $(BF16_INST))
$(call gen_doc, $(BF16_POLICY_DIR),intrinsic_funcs,non-overloaded-docs,--has-policy --skip-default-inst --vendor-inst $(BF16_INST))
$(call clang_format_adoc, --folder, $(BF16_DIR)/intrinsic_funcs)
$(call clang_format_adoc, --folder, $(BF16_POLICY_DIR)/intrinsic_funcs)
$(call gen_docs_rule,$(BF16_DIR),intrinsic_funcs,--skip-default-inst --vendor-inst $(BF16_INST),$(BF16_POLICY_DIR))

bf16-overloaded-doc:
$(call gen_doc, $(BF16_DIR),overloaded_intrinsic_funcs.adoc,overloaded-doc,--skip-default-inst --vendor-inst $(BF16_INST))
$(call gen_doc, $(BF16_POLICY_DIR),overloaded_intrinsic_funcs.adoc,overloaded-doc,--has-policy --skip-default-inst --vendor-inst $(BF16_INST))
$(call clang_format_adoc, --file, $(BF16_DIR)/overloaded_intrinsic_funcs.adoc)
$(call clang_format_adoc, --file, $(BF16_POLICY_DIR)/overloaded_intrinsic_funcs.adoc)
$(call gen_doc_rule,$(BF16_DIR),overloaded_intrinsic_funcs.adoc,--skip-default-inst --vendor-inst $(BF16_INST),$(BF16_POLICY_DIR))

bf16-overloaded-docs:
$(call gen_doc, $(BF16_DIR),overloaded_intrinsic_funcs,overloaded-docs,--skip-default-inst --vendor-inst $(BF16_INST))
$(call gen_doc, $(BF16_POLICY_DIR),overloaded_intrinsic_funcs,overloaded-docs,--has-policy --skip-default-inst --vendor-inst $(BF16_INST))
$(call clang_format_adoc, --folder, $(BF16_DIR)/overloaded_intrinsic_funcs)
$(call clang_format_adoc, --folder, $(BF16_POLICY_DIR)/overloaded_intrinsic_funcs)
$(call gen_docs_rule,$(BF16_DIR),overloaded_intrinsic_funcs,--skip-default-inst --vendor-inst $(BF16_INST),$(BF16_POLICY_DIR))

# BFloat16 tests
# Generate non-overloaded intrinsic testing C source files
bf16-non-overloaded-test:
$(call gen_tests,$(BF16_DIR)/api-testing,non-overloaded-test,--skip-default-inst --vendor-inst $(BF16_INST))
$(call gen_tests,$(BF16_POLICY_DIR)/api-testing,non-overloaded-test,--has-policy --skip-default-inst --vendor-inst $(BF16_INST))
clang-format -i $(BF16_DIR)/api-testing/*
clang-format -i $(BF16_POLICY_DIR)/api-testing/*
$(call gen_test_rule,$(BF16_DIR)/api-testing,non-overloaded-test,--skip-default-inst --vendor-inst $(BF16_INST),$(BF16_POLICY_DIR)/api-testing)

# Generate overloaded intrinsic testing C source files
bf16-overloaded-test:
$(call gen_tests,$(BF16_DIR)/overloaded-api-testing,overloaded-test,--skip-default-inst --vendor-inst $(BF16_INST))
$(call gen_tests,$(BF16_POLICY_DIR)/overloaded-api-testing,overloaded-test,--has-policy --skip-default-inst --vendor-inst $(BF16_INST))
clang-format -i $(BF16_DIR)/overloaded-api-testing/*
clang-format -i $(BF16_POLICY_DIR)/overloaded-api-testing/*
$(call gen_test_rule,$(BF16_DIR)/overloaded-api-testing,overloaded-test,--skip-default-inst --vendor-inst $(BF16_INST),$(BF16_POLICY_DIR)/overloaded-api-testing)

# Generate non-overloaded intrinsic testing C source files
bf16-llvm-non-overloaded-test:
$(call gen_tests,$(BF16_DIR)/llvm-api-tests,non-overloaded-test,--toolchain-type llvm --skip-default-inst --vendor-inst $(BF16_INST))
$(call gen_tests,$(BF16_POLICY_DIR)/llvm-api-tests,non-overloaded-test,--toolchain-type llvm --has-policy --skip-default-inst --vendor-inst $(BF16_INST))
$(call replace_float, $(BF16_DIR)/llvm-api-tests)
$(call replace_float, $(BF16_POLICY_DIR)/llvm-api-tests)
clang-format -i $(BF16_DIR)/llvm-api-tests/*
clang-format -i $(BF16_POLICY_DIR)/llvm-api-tests/*
$(call gen_llvm_test_rule,$(BF16_DIR)/llvm-api-tests,non-overloaded-test,--skip-default-inst --vendor-inst $(BF16_INST),$(BF16_POLICY_DIR)/llvm-api-tests)

# Generate overloaded intrinsic testing C source files
bf16-llvm-overloaded-test:
$(call gen_tests,$(BF16_DIR)/llvm-overloaded-tests,overloaded-test,--toolchain-type llvm --skip-default-inst --vendor-inst $(BF16_INST))
$(call gen_tests,$(BF16_POLICY_DIR)/llvm-overloaded-tests,overloaded-test,--toolchain-type llvm --has-policy --skip-default-inst --vendor-inst $(BF16_INST))
$(call replace_float, $(BF16_DIR)/llvm-overloaded-tests)
$(call replace_float, $(BF16_POLICY_DIR)/llvm-overloaded-tests)
clang-format -i $(BF16_DIR)/llvm-overloaded-tests/*
clang-format -i $(BF16_POLICY_DIR)/llvm-overloaded-tests/*
$(call gen_llvm_test_rule,$(BF16_DIR)/llvm-overloaded-tests,overloaded-test,--skip-default-inst --vendor-inst $(BF16_INST),$(BF16_POLICY_DIR)/llvm-overloaded-tests)

# Vector crypto documents
vector-crypto-non-overloaded-doc:
$(call gen_doc,$(VECTOR_CRYPTO_DIR),intrinsic_funcs.adoc,non-overloaded-doc,--gen-vector-crypto $(EXTRA_FLAG))
$(call gen_doc,$(VECTOR_CRYPTO_POLICY_DIR),intrinsic_funcs.adoc,non-overloaded-doc,--gen-vector-crypto --has-policy $(EXTRA_FLAG))
$(call clang_format_adoc, --file, $(VECTOR_CRYPTO_DIR)/intrinsic_funcs.adoc)
$(call clang_format_adoc, --file, $(VECTOR_CRYPTO_POLICY_DIR)/intrinsic_funcs.adoc)
$(call gen_doc_rule,$(VECTOR_CRYPTO_DIR),intrinsic_funcs.adoc,--gen-vector-crypto,$(VECTOR_CRYPTO_POLICY_DIR))

vector-crypto-non-overloaded-docs:
$(call gen_doc,$(VECTOR_CRYPTO_DIR),intrinsic_funcs,non-overloaded-docs,--gen-vector-crypto $(EXTRA_FLAG))
$(call gen_doc,$(VECTOR_CRYPTO_POLICY_DIR),intrinsic_funcs,non-overloaded-docs,--gen-vector-crypto --has-policy $(EXTRA_FLAG))
$(call clang_format_adoc, --folder, $(VECTOR_CRYPTO_DIR)/intrinsic_funcs)
$(call clang_format_adoc, --folder, $(VECTOR_CRYPTO_POLICY_DIR)/intrinsic_funcs)
$(call gen_docs_rule,$(VECTOR_CRYPTO_DIR),intrinsic_funcs,--gen-vector-crypto,$(VECTOR_CRYPTO_POLICY_DIR))

vector-crypto-overloaded-doc:
$(call gen_doc,$(VECTOR_CRYPTO_DIR),overloaded_intrinsic_funcs.adoc,overloaded-doc,--gen-vector-crypto $(EXTRA_FLAG))
$(call gen_doc,$(VECTOR_CRYPTO_POLICY_DIR),overloaded_intrinsic_funcs.adoc,overloaded-doc,--gen-vector-crypto --has-policy $(EXTRA_FLAG))
$(call clang_format_adoc, --file, $(VECTOR_CRYPTO_DIR)/overloaded_intrinsic_funcs.adoc)
$(call clang_format_adoc, --file, $(VECTOR_CRYPTO_POLICY_DIR)/overloaded_intrinsic_funcs.adoc)
$(call gen_doc_rule,$(VECTOR_CRYPTO_DIR),overloaded_intrinsic_funcs.adoc,--gen-vector-crypto,$(VECTOR_CRYPTO_POLICY_DIR))

vector-crypto-overloaded-docs:
$(call gen_doc,$(VECTOR_CRYPTO_DIR),overloaded_intrinsic_funcs,overloaded-docs,--gen-vector-crypto $(EXTRA_FLAG))
$(call gen_doc,$(VECTOR_CRYPTO_POLICY_DIR),overloaded_intrinsic_funcs,overloaded-docs,--gen-vector-crypto --has-policy $(EXTRA_FLAG))
$(call clang_format_adoc, --folder, $(VECTOR_CRYPTO_DIR)/overloaded_intrinsic_funcs)
$(call clang_format_adoc, --folder, $(VECTOR_CRYPTO_POLICY_DIR)/overloaded_intrinsic_funcs)
$(call gen_docs_rule,$(VECTOR_CRYPTO_DIR),overloaded_intrinsic_funcs,--gen-vector-crypto,$(VECTOR_CRYPTO_POLICY_DIR))

# Vector-crypto tests
vector-crypto-non-overloaded-test:
$(call gen_tests,$(VECTOR_CRYPTO_DIR)/api-testing,non-overloaded-test,--gen-vector-crypto $(EXTRA_FLAG))
$(call gen_tests,$(VECTOR_CRYPTO_POLICY_DIR)/api-testing,non-overloaded-test,--gen-vector-crypto --has-policy $(EXTRA_FLAG))
clang-format -i $(VECTOR_CRYPTO_DIR)/api-testing/*
clang-format -i $(VECTOR_CRYPTO_POLICY_DIR)/api-testing/*
$(call gen_test_rule,$(VECTOR_CRYPTO_DIR)/api-testing,non-overloaded-test,--gen-vector-crypto, $(VECTOR_CRYPTO_POLICY_DIR)/api-testing)

vector-crypto-overloaded-test:
$(call gen_tests,$(VECTOR_CRYPTO_DIR)/overloaded-api-testing,overloaded-test,--gen-vector-crypto $(EXTRA_FLAG))
$(call gen_tests,$(VECTOR_CRYPTO_POLICY_DIR)/overloaded-api-testing,overloaded-test,--gen-vector-crypto --has-policy $(EXTRA_FLAG))
clang-format -i $(VECTOR_CRYPTO_DIR)/overloaded-api-testing/*
clang-format -i $(VECTOR_CRYPTO_POLICY_DIR)/overloaded-api-testing/*
$(call gen_test_rule,$(VECTOR_CRYPTO_DIR)/overloaded-api-testing,overloaded-test,--gen-vector-crypto, $(VECTOR_CRYPTO_POLICY_DIR)/overloaded-api-testing)

vector-crypto-llvm-non-overloaded-test:
$(call gen_tests,$(VECTOR_CRYPTO_DIR)/llvm-api-tests,non-overloaded-test,--toolchain-type llvm --gen-vector-crypto $(EXTRA_FLAG))
$(call gen_tests,$(VECTOR_CRYPTO_POLICY_DIR)/llvm-api-tests,non-overloaded-test,--toolchain-type llvm --gen-vector-crypto --has-policy $(EXTRA_FLAG))
$(call replace_float, $(VECTOR_CRYPTO_DIR)/llvm-api-tests)
$(call replace_float, $(VECTOR_CRYPTO_POLICY_DIR)/llvm-api-tests)
clang-format -i $(VECTOR_CRYPTO_DIR)/llvm-api-tests/*
clang-format -i $(VECTOR_CRYPTO_POLICY_DIR)/llvm-api-tests/*
$(call gen_llvm_test_rule,$(VECTOR_CRYPTO_DIR)/llvm-api-tests,non-overloaded-test,--gen-vector-crypto,$(VECTOR_CRYPTO_POLICY_DIR)/llvm-api-tests)

vector-crypto-llvm-overloaded-test:
$(call gen_tests,$(VECTOR_CRYPTO_DIR)/llvm-overloaded-tests,overloaded-test,--toolchain-type llvm --gen-vector-crypto $(EXTRA_FLAG))
$(call gen_tests,$(VECTOR_CRYPTO_POLICY_DIR)/llvm-overloaded-tests,overloaded-test,--toolchain-type llvm --gen-vector-crypto --has-policy $(EXTRA_FLAG))
$(call replace_float, $(VECTOR_CRYPTO_DIR)/llvm-overloaded-tests)
$(call replace_float, $(VECTOR_CRYPTO_POLICY_DIR)/llvm-overloaded-tests)
clang-format -i $(VECTOR_CRYPTO_DIR)/llvm-overloaded-tests/*
clang-format -i $(VECTOR_CRYPTO_POLICY_DIR)/llvm-overloaded-tests/*
$(call gen_llvm_test_rule,$(VECTOR_CRYPTO_DIR)/llvm-overloaded-tests,overloaded-test,--gen-vector-crypto,$(VECTOR_CRYPTO_POLICY_DIR)/llvm-overloaded-tests)

###############################################################################

Expand Down