summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjinbo <jinbo@loongson.cn>2025-07-25 13:48:56 +0800
committerjinboson <jinbo-hf@loongson.cn>2025-09-16 01:08:47 +0000
commit0c81b441ef052f41eab522d353249b861fb332c1 (patch)
treed76ed3b40c5efbb896a2b8d55ad82dbd61b89390
parent299c612f6f322aecbc3d047d416bb3b6f973513f (diff)
LASX: Compute loop_shift
Part-of: <https://gitlab.freedesktop.org/gstreamer/orc/-/merge_requests/248>
-rw-r--r--orc/loongarch/orclasx-internal.h1
-rw-r--r--orc/loongarch/orclasxcompiler.c24
2 files changed, 24 insertions, 1 deletions
diff --git a/orc/loongarch/orclasx-internal.h b/orc/loongarch/orclasx-internal.h
index e0d206c..46b2aa0 100644
--- a/orc/loongarch/orclasx-internal.h
+++ b/orc/loongarch/orclasx-internal.h
@@ -36,6 +36,7 @@ ORC_BEGIN_DECLS
/* orclasxcompiler.c */
ORC_INTERNAL void orc_lasx_compiler_init (OrcCompiler * c);
ORC_INTERNAL void orc_lasx_compiler_assemble (OrcCompiler * c);
+ORC_INTERNAL void orc_lasx_compiler_compute_loop_shift (OrcCompiler *c);
/* orclasxrules.c */
ORC_INTERNAL void orc_lasx_rules_init (OrcTarget * target);
/* orclasxtarget.c */
diff --git a/orc/loongarch/orclasxcompiler.c b/orc/loongarch/orclasxcompiler.c
index 175dc1c..16e47af 100644
--- a/orc/loongarch/orclasxcompiler.c
+++ b/orc/loongarch/orclasxcompiler.c
@@ -83,7 +83,29 @@ orc_lasx_compiler_init (OrcCompiler *c)
}
void
+orc_lasx_compiler_compute_loop_shift (OrcCompiler *c)
+{
+ switch (c->max_var_size) {
+ case 1:
+ c->loop_shift = 5;
+ break;
+ case 2:
+ c->loop_shift = 4;
+ break;
+ case 4:
+ c->loop_shift = 3;
+ break;
+ case 8:
+ c->loop_shift = 2;
+ break;
+ default:
+ ORC_ERROR ("unhandled max var size %d", c->max_var_size);
+ break;
+ }
+}
+
+void
orc_lasx_compiler_assemble (OrcCompiler *c)
{
- ORC_ASSERT (FALSE); /* TODO */
+ orc_lasx_compiler_compute_loop_shift (c);
}