[sim] made softfloat files C instead of C++
[riscv-isa-sim.git] / softfloat / s_shift128ExtraRightJam.c
diff --git a/softfloat/s_shift128ExtraRightJam.c b/softfloat/s_shift128ExtraRightJam.c
new file mode 100755 (executable)
index 0000000..6c57974
--- /dev/null
@@ -0,0 +1,38 @@
+\r
+#include <stdint.h>\r
+#include "platform.h"\r
+#include "primitives.h"\r
+\r
+struct uint128_extra\r
+ softfloat_shift128ExtraRightJam(\r
+     uint64_t a64, uint64_t a0, uint64_t extra, unsigned int count )\r
+{\r
+    unsigned int negCount;\r
+    struct uint128_extra z;\r
+\r
+    negCount = - count;\r
+    if ( count < 64 ) {\r
+        z.v64 = a64>>count;\r
+        z.v0 = a64<<( negCount & 63 ) | a0>>count;\r
+        z.extra = a0<<( negCount & 63 );\r
+    } else {\r
+        z.v64 = 0;\r
+        if ( count == 64 ) {\r
+            z.v0 = a64;\r
+            z.extra = a0;\r
+        } else {\r
+            extra |= a0;\r
+            if ( count < 128 ) {\r
+                z.v0 = a64>>( count & 63 );\r
+                z.extra = a64<<( negCount & 63 );\r
+            } else {\r
+                z.v0 = 0;\r
+                z.extra = ( count == 128 ) ? a64 : ( a64 != 0 );\r
+            }\r
+        }\r
+    }\r
+    z.extra |= ( extra != 0 );\r
+    return z;\r
+\r
+}\r
+\r