riscv: support standalone applications on RV64I systems
[oweals/u-boot.git] / examples / standalone / stubs.c
index f37d209da6db2b731b06a581a8a92886a0a6af36..0827bde35e581b27b9b7d081fef35ae296c4f698 100644 (file)
@@ -176,6 +176,16 @@ gd_t *global_data;
 /*
  * gp holds the pointer to the global_data. t0 is call clobbered.
  */
+#ifdef CONFIG_ARCH_RV64I
+#define EXPORT_FUNC(f, a, x, ...)      \
+       asm volatile (                  \
+"      .globl " #x "\n"                \
+#x ":\n"                               \
+"      ld      t0, %0(gp)\n"           \
+"      ld      t0, %1(t0)\n"           \
+"      jr      t0\n"                   \
+       : : "i"(offsetof(gd_t, jt)), "i"(FO(x)) : "t0");
+#else
 #define EXPORT_FUNC(f, a, x, ...)      \
        asm volatile (                  \
 "      .globl " #x "\n"                \
@@ -184,6 +194,7 @@ gd_t *global_data;
 "      lw      t0, %1(t0)\n"           \
 "      jr      t0\n"                   \
        : : "i"(offsetof(gd_t, jt)), "i"(FO(x)) : "t0");
+#endif
 #elif defined(CONFIG_ARC)
 /*
  * r25 holds the pointer to the global_data. r10 is call clobbered.