on master help sign in
Correct codegen for bitstring complements
e26a119Benjamin Saunders
rts/idris_bitstring.h+4
@@ -24,6 +24,7 @@ VAL idris_b8Gt(VM *vm, VAL a, VAL b);
24VAL idris_b8Eq(VM *vm, VAL a, VAL b);
24VAL idris_b8Eq(VM *vm, VAL a, VAL b);
25VAL idris_b8Lte(VM *vm, VAL a, VAL b);
25VAL idris_b8Lte(VM *vm, VAL a, VAL b);
26VAL idris_b8Gte(VM *vm, VAL a, VAL b);
26VAL idris_b8Gte(VM *vm, VAL a, VAL b);
27+VAL idris_b8Compl(VM *vm, VAL a);
27VAL idris_b8And(VM *vm, VAL a, VAL b);
28VAL idris_b8And(VM *vm, VAL a, VAL b);
28VAL idris_b8Or(VM *vm, VAL a, VAL b);
29VAL idris_b8Or(VM *vm, VAL a, VAL b);
29VAL idris_b8Neg(VM *vm, VAL a);
30VAL idris_b8Neg(VM *vm, VAL a);
@@ -55,6 +56,7 @@ VAL idris_b16Gt(VM *vm, VAL a, VAL b);
55VAL idris_b16Eq(VM *vm, VAL a, VAL b);
56VAL idris_b16Eq(VM *vm, VAL a, VAL b);
56VAL idris_b16Lte(VM *vm, VAL a, VAL b);
57VAL idris_b16Lte(VM *vm, VAL a, VAL b);
57VAL idris_b16Gte(VM *vm, VAL a, VAL b);
58VAL idris_b16Gte(VM *vm, VAL a, VAL b);
59+VAL idris_b16Compl(VM *vm, VAL a);
58VAL idris_b16And(VM *vm, VAL a, VAL b);
60VAL idris_b16And(VM *vm, VAL a, VAL b);
59VAL idris_b16Or(VM *vm, VAL a, VAL b);
61VAL idris_b16Or(VM *vm, VAL a, VAL b);
60VAL idris_b16Neg(VM *vm, VAL a);
62VAL idris_b16Neg(VM *vm, VAL a);
@@ -81,6 +83,7 @@ VAL idris_b32Gt(VM *vm, VAL a, VAL b);
81VAL idris_b32Eq(VM *vm, VAL a, VAL b);
83VAL idris_b32Eq(VM *vm, VAL a, VAL b);
82VAL idris_b32Lte(VM *vm, VAL a, VAL b);
84VAL idris_b32Lte(VM *vm, VAL a, VAL b);
83VAL idris_b32Gte(VM *vm, VAL a, VAL b);
85VAL idris_b32Gte(VM *vm, VAL a, VAL b);
86+VAL idris_b32Compl(VM *vm, VAL a);
84VAL idris_b32And(VM *vm, VAL a, VAL b);
87VAL idris_b32And(VM *vm, VAL a, VAL b);
85VAL idris_b32Or(VM *vm, VAL a, VAL b);
88VAL idris_b32Or(VM *vm, VAL a, VAL b);
86VAL idris_b32Neg(VM *vm, VAL a);
89VAL idris_b32Neg(VM *vm, VAL a);
@@ -106,6 +109,7 @@ VAL idris_b64Gt(VM *vm, VAL a, VAL b);
106VAL idris_b64Eq(VM *vm, VAL a, VAL b);
109VAL idris_b64Eq(VM *vm, VAL a, VAL b);
107VAL idris_b64Lte(VM *vm, VAL a, VAL b);
110VAL idris_b64Lte(VM *vm, VAL a, VAL b);
108VAL idris_b64Gte(VM *vm, VAL a, VAL b);
111VAL idris_b64Gte(VM *vm, VAL a, VAL b);
112+VAL idris_b64Compl(VM *vm, VAL a);
109VAL idris_b64And(VM *vm, VAL a, VAL b);
113VAL idris_b64And(VM *vm, VAL a, VAL b);
110VAL idris_b64Or(VM *vm, VAL a, VAL b);
114VAL idris_b64Or(VM *vm, VAL a, VAL b);
111VAL idris_b64Neg(VM *vm, VAL a);
115VAL idris_b64Neg(VM *vm, VAL a);
src/IRTS/CodegenC.hs+4−4
@@ -316,7 +316,7 @@ doOp v LB8AShr [x, y] = v ++ "idris_b8AShr(vm, " ++ creg x ++ "," ++ creg y ++ "
316doOp v LB8And [x, y] = v ++ "idris_b8And(vm, " ++ creg x ++ "," ++ creg y ++ ")"
316doOp v LB8And [x, y] = v ++ "idris_b8And(vm, " ++ creg x ++ "," ++ creg y ++ ")"
317doOp v LB8Or [x, y] = v ++ "idris_b8Or(vm, " ++ creg x ++ "," ++ creg y ++ ")"
317doOp v LB8Or [x, y] = v ++ "idris_b8Or(vm, " ++ creg x ++ "," ++ creg y ++ ")"
318doOp v LB8Xor [x, y] = v ++ "idris_b8Xor(vm, " ++ creg x ++ "," ++ creg y ++ ")"
318doOp v LB8Xor [x, y] = v ++ "idris_b8Xor(vm, " ++ creg x ++ "," ++ creg y ++ ")"
319−doOp v LB8Compl [x, y] = v ++ "idris_b8Compl(vm, " ++ creg x ++ "," ++ creg y ++ ")"
319+doOp v LB8Compl [x] = v ++ "idris_b8Compl(vm, " ++ creg x ++ ")"
320
320
321doOp v LB8Plus [x, y] = v ++ "idris_b8Plus(vm, " ++ creg x ++ "," ++ creg y ++ ")"
321doOp v LB8Plus [x, y] = v ++ "idris_b8Plus(vm, " ++ creg x ++ "," ++ creg y ++ ")"
322doOp v LB8Minus [x, y] = v ++ "idris_b8Minus(vm, " ++ creg x ++ "," ++ creg y ++ ")"
322doOp v LB8Minus [x, y] = v ++ "idris_b8Minus(vm, " ++ creg x ++ "," ++ creg y ++ ")"
@@ -345,7 +345,7 @@ doOp v LB16AShr [x, y] = v ++ "idris_b16AShr(vm, " ++ creg x ++ "," ++ creg y ++
345doOp v LB16And [x, y] = v ++ "idris_b16And(vm, " ++ creg x ++ "," ++ creg y ++ ")"
345doOp v LB16And [x, y] = v ++ "idris_b16And(vm, " ++ creg x ++ "," ++ creg y ++ ")"
346doOp v LB16Or [x, y] = v ++ "idris_b16Or(vm, " ++ creg x ++ "," ++ creg y ++ ")"
346doOp v LB16Or [x, y] = v ++ "idris_b16Or(vm, " ++ creg x ++ "," ++ creg y ++ ")"
347doOp v LB16Xor [x, y] = v ++ "idris_b16Xor(vm, " ++ creg x ++ "," ++ creg y ++ ")"
347doOp v LB16Xor [x, y] = v ++ "idris_b16Xor(vm, " ++ creg x ++ "," ++ creg y ++ ")"
348−doOp v LB16Compl [x, y] = v ++ "idris_b16Compl(vm, " ++ creg x ++ "," ++ creg y ++ ")"
348+doOp v LB16Compl [x] = v ++ "idris_b16Compl(vm, " ++ creg x ++ ")"
349
349
350doOp v LB16Plus [x, y] =
350doOp v LB16Plus [x, y] =
351 v ++ "idris_b16Plus(vm, " ++ creg x ++ "," ++ creg y ++ ")"
351 v ++ "idris_b16Plus(vm, " ++ creg x ++ "," ++ creg y ++ ")"
@@ -380,7 +380,7 @@ doOp v LB32AShr [x, y] = v ++ "idris_b32AShr(vm, " ++ creg x ++ "," ++ creg y ++
380doOp v LB32And [x, y] = v ++ "idris_b32And(vm, " ++ creg x ++ "," ++ creg y ++ ")"
380doOp v LB32And [x, y] = v ++ "idris_b32And(vm, " ++ creg x ++ "," ++ creg y ++ ")"
381doOp v LB32Or [x, y] = v ++ "idris_b32Or(vm, " ++ creg x ++ "," ++ creg y ++ ")"
381doOp v LB32Or [x, y] = v ++ "idris_b32Or(vm, " ++ creg x ++ "," ++ creg y ++ ")"
382doOp v LB32Xor [x, y] = v ++ "idris_b32Xor(vm, " ++ creg x ++ "," ++ creg y ++ ")"
382doOp v LB32Xor [x, y] = v ++ "idris_b32Xor(vm, " ++ creg x ++ "," ++ creg y ++ ")"
383−doOp v LB32Compl [x, y] = v ++ "idris_b32Compl(vm, " ++ creg x ++ "," ++ creg y ++ ")"
383+doOp v LB32Compl [x] = v ++ "idris_b32Compl(vm, " ++ creg x ++ ")"
384
384
385doOp v LB32Plus [x, y] =
385doOp v LB32Plus [x, y] =
386 v ++ "idris_b32Plus(vm, " ++ creg x ++ "," ++ creg y ++ ")"
386 v ++ "idris_b32Plus(vm, " ++ creg x ++ "," ++ creg y ++ ")"
@@ -414,7 +414,7 @@ doOp v LB64AShr [x, y] = v ++ "idris_b64AShr(vm, " ++ creg x ++ "," ++ creg y ++
414doOp v LB64And [x, y] = v ++ "idris_b64And(vm, " ++ creg x ++ "," ++ creg y ++ ")"
414doOp v LB64And [x, y] = v ++ "idris_b64And(vm, " ++ creg x ++ "," ++ creg y ++ ")"
415doOp v LB64Or [x, y] = v ++ "idris_b64Or(vm, " ++ creg x ++ "," ++ creg y ++ ")"
415doOp v LB64Or [x, y] = v ++ "idris_b64Or(vm, " ++ creg x ++ "," ++ creg y ++ ")"
416doOp v LB64Xor [x, y] = v ++ "idris_b64Xor(vm, " ++ creg x ++ "," ++ creg y ++ ")"
416doOp v LB64Xor [x, y] = v ++ "idris_b64Xor(vm, " ++ creg x ++ "," ++ creg y ++ ")"
417−doOp v LB64Compl [x, y] = v ++ "idris_b64Compl(vm, " ++ creg x ++ "," ++ creg y ++ ")"
417+doOp v LB64Compl [x] = v ++ "idris_b64Compl(vm, " ++ creg x ++ ")"
418
418
419doOp v LB64Plus [x, y] =
419doOp v LB64Plus [x, y] =
420 v ++ "idris_b64Plus(vm, " ++ creg x ++ "," ++ creg y ++ ")"
420 v ++ "idris_b64Plus(vm, " ++ creg x ++ "," ++ creg y ++ ")"