Add __multi3() to crt library
diff --git a/sdk/lib/crt/arith64.c b/sdk/lib/crt/arith64.c
index bb64553..8cd8a14 100644
--- a/sdk/lib/crt/arith64.c
+++ b/sdk/lib/crt/arith64.c
@@ -25,6 +25,7 @@
 // - Add asm labels so that the compiler doesn't need to know the C++ type encodings for builtins.
 // - Use standard integer types.
 // - Add SPDX tags for license from the upstream repository (commit 426b7578ecfb5ce7c841e738613cff2a261214eb)
+// - Add the implementation of __multi3() 
 //
 // This file is *not* formatted, to make it easier to track changes from upstream (if there are any).
 
@@ -54,6 +55,7 @@
 int __cheri_libcall __popcountdi2(arith64_u64 a) __asm__("__popcountdi2");
 arith64_u64 __cheri_libcall __udivdi3(arith64_u64 a, arith64_u64 b) __asm__("__udivdi3");
 arith64_u64 __cheri_libcall __umoddi3(arith64_u64 a, arith64_u64 b) __asm__("__umoddi3");
+arith64_u64 __cheri_libcall __multi3(arith64_u64 a, arith64_u64 b) __asm__("__multi3");
 
 typedef union
 {
@@ -300,3 +302,9 @@
     __divmoddi4(a, b, &r);
     return r;
 }
+
+// Return the product of a and b
+[[clang::no_builtin]] arith64_u64 __multi3(arith64_u64 a, arith64_u64 b)
+{
+    return a * b;
+}
\ No newline at end of file