aboutsummaryrefslogtreecommitdiff
path: root/Semestr 4/ask/lista5/zad5.c
diff options
context:
space:
mode:
Diffstat (limited to 'Semestr 4/ask/lista5/zad5.c')
-rw-r--r--Semestr 4/ask/lista5/zad5.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/Semestr 4/ask/lista5/zad5.c b/Semestr 4/ask/lista5/zad5.c
new file mode 100644
index 0000000..c1fe957
--- /dev/null
+++ b/Semestr 4/ask/lista5/zad5.c
@@ -0,0 +1,54 @@
+#include <stdio.h>
+#include <stdint.h>
+
+long switch_prob(long rdi, long rsi) {
+ static void *array[] = { &&L1, &&L1, &&L2, &&L3, &&L4, &&L5 };
+ long rax;
+ rsi -= 0x3c;
+ if (rsi > 0x5) {
+ goto L3;
+ }
+ goto *array[rsi];
+L1:
+ rax = rdi * 8;
+ return rax;
+L4:
+ rax = rdi;
+ rax >>= 3;
+ retun rax;
+L2:
+ rax = rdi;
+ rax <<= 4;
+ rax -= rdi;
+ rdi = rax;
+L5:
+ rdi *= rdi;
+L3:
+ rax = 0x4b + rdi;
+ return rax;
+}
+
+long decode(long x, long n) {
+ long result;
+ n -= 0x3c;
+ switch (n)
+ {
+ case 0:
+ case 1:
+ return x + 8;
+ case 4:
+ return x >> 3;
+ case 2:
+ result = (x << 4) - x;
+ x = result;
+ case 5:
+ x *= x;
+ case 3:
+ default:
+ return 0x4b + x;
+ }
+}
+
+int main() {
+
+} \ No newline at end of file