From cbf8434e44ebd6bc05022d1fbe0400267520184f Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Fri, 20 Mar 2015 11:25:30 +0100 Subject: Improvements in the StructReturn transformation (ABI conformance for passing composites). - Implement the "1/2/4/8" composite return policy, used by IA32/MacOS X and IA32/BSD. - Move the default passing conventions from Machine.ml to compcert.ini, making it easier to test the various conventions. - More comprehensive interoperability test in regression/interop1.c. --- test/regression/Results/interop1 | 148 +++++++++++++++++++++++---------------- 1 file changed, 86 insertions(+), 62 deletions(-) (limited to 'test/regression/Results') diff --git a/test/regression/Results/interop1 b/test/regression/Results/interop1 index bac9aaab..990dfe9d 100644 --- a/test/regression/Results/interop1 +++ b/test/regression/Results/interop1 @@ -1,66 +1,90 @@ --- CompCert calling native: -s1 = { a = 'a' } -s2 = { a = 'x', b = 'y' } -s3 = { a = 'a', b = 'b', c = ' c' } -s4 = { a = 'p', b = 'q', c = ' r', d = 's' } -s5 = { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e' } -s6 = { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e', f = 'f' } -s7 = { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e', f = 'f', g = 'g' } -s8 = "Hello, world!" -t1 = { a = 12 } -t2 = { a = 34, b = 56 } -t3 = { a = -1, b = -2, c = -3 } -t4 = { a = 11, b = 22, c = 33, d = 44 } -t4 = { a = 1, b = 2, c = 3, d = 4, e = 'x' } -u1 = { a = 12345678 } -u2 = { a = 1, b = -1 } -u3 = { a = -1, b = -2, c = -3 } -u4 = { a = 4, b = 3, c = 2, d = 1 } -u5 = { a = 123, b = 'z' } -u6 = { a = -12345678, b = 555 } -u7 = { a = 111111111, b = 2222, c = 'a' } -u8 = { a = 'u', b = 8 } -u9 = { a = { 9, 8, 7, 6 } } +s1: { a = 'a' } +s2: { a = 'a', b = 'b' } +s3: { a = 'a', b = 'b', c = ' c' } +s4: { a = 'a', b = 'b', c = ' c', d = 'd' } +s5: { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e' } +s6: { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e', f = 'f' } +s7: { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e', f = 'f', g = 'g' } +s8: "Hello world!" +t1: { a = 123 } +t2: { a = 123, b = 456 } +t3: { a = 123, b = 456, c = 789 } +t4: { a = 123, b = 456, c = 789, d = -111 } +t5: { a = 123, b = 456, c = 789, d = -999, e = 'x' } +u1: { a = 12 } +u2: { a = 12, b = -34 } +u3: { a = 12, b = 34, c = -56 } +u4: { a = 12, b = 34, c = 56, d = -78 } +u5: { a = 1234, b = 'u' } +u6: { a = 55555, b = 666 } +u7: { a = -10001, b = -789, c = 'z' } +u8: { a = 'x', b = 12345 } after ms4, x = { 's', 'a', 'm', 'e' } -after mu9, x = { a = { 11, 22, 33, 44 } } -rs1 = { a = 'a' } -rs2 = { a = 'a', b = 'b' } -rs3 = { a = 'a', b = 'b', c = 'c' } -rs4 = { a = 'a', b = 'b', c = 'c', d = 'd' } -rs8 = { "Lorem ipsum" } -ru2 = { a = 12, b = -34 } -ru6 = { a = 12345678, b = -9999 } -ru9 = { a = { 111, 222, 333, 444 } } +after mu4, x = { a = { 11, 22, 33, 44 } } +rs1: { a = 'a' } +rs2: { a = 'a', b = 'b' } +rs3: { a = 'a', b = 'b', c = ' c' } +rs4: { a = 'a', b = 'b', c = ' c', d = 'd' } +rs5: { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e' } +rs6: { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e', f = 'f' } +rs7: { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e', f = 'f', g = 'g' } +rs8: "Hello world!" +rt1: { a = 123 } +rt2: { a = 123, b = 456 } +rt3: { a = 123, b = 456, c = 789 } +rt4: { a = 123, b = 456, c = 789, d = -111 } +rt5: { a = 123, b = 456, c = 789, d = -999, e = 'x' } +ru1: { a = 12 } +ru2: { a = 12, b = -34 } +ru3: { a = 12, b = 34, c = -56 } +ru4: { a = 12, b = 34, c = 56, d = -78 } +ru5: { a = 1234, b = 'u' } +ru6: { a = 55555, b = 666 } +ru7: { a = -10001, b = -789, c = 'z' } +ru8: { a = 'x', b = 12345 } --- native calling CompCert: -s1 = { a = 'a' } -s2 = { a = 'x', b = 'y' } -s3 = { a = 'a', b = 'b', c = ' c' } -s4 = { a = 'p', b = 'q', c = ' r', d = 's' } -s5 = { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e' } -s6 = { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e', f = 'f' } -s7 = { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e', f = 'f', g = 'g' } -s8 = "Hello, world!" -t1 = { a = 12 } -t2 = { a = 34, b = 56 } -t3 = { a = -1, b = -2, c = -3 } -t4 = { a = 11, b = 22, c = 33, d = 44 } -t4 = { a = 1, b = 2, c = 3, d = 4, e = 'x' } -u1 = { a = 12345678 } -u2 = { a = 1, b = -1 } -u3 = { a = -1, b = -2, c = -3 } -u4 = { a = 4, b = 3, c = 2, d = 1 } -u5 = { a = 123, b = 'z' } -u6 = { a = -12345678, b = 555 } -u7 = { a = 111111111, b = 2222, c = 'a' } -u8 = { a = 'u', b = 8 } -u9 = { a = { 9, 8, 7, 6 } } +s1: { a = 'a' } +s2: { a = 'a', b = 'b' } +s3: { a = 'a', b = 'b', c = ' c' } +s4: { a = 'a', b = 'b', c = ' c', d = 'd' } +s5: { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e' } +s6: { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e', f = 'f' } +s7: { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e', f = 'f', g = 'g' } +s8: "Hello world!" +t1: { a = 123 } +t2: { a = 123, b = 456 } +t3: { a = 123, b = 456, c = 789 } +t4: { a = 123, b = 456, c = 789, d = -111 } +t5: { a = 123, b = 456, c = 789, d = -999, e = 'x' } +u1: { a = 12 } +u2: { a = 12, b = -34 } +u3: { a = 12, b = 34, c = -56 } +u4: { a = 12, b = 34, c = 56, d = -78 } +u5: { a = 1234, b = 'u' } +u6: { a = 55555, b = 666 } +u7: { a = -10001, b = -789, c = 'z' } +u8: { a = 'x', b = 12345 } after ms4, x = { 's', 'a', 'm', 'e' } -after mu9, x = { a = { 11, 22, 33, 44 } } -rs1 = { a = 'a' } -rs2 = { a = 'a', b = 'b' } -rs3 = { a = 'a', b = 'b', c = 'c' } -rs4 = { a = 'a', b = 'b', c = 'c', d = 'd' } -rs8 = { "Lorem ipsum" } -ru2 = { a = 12, b = -34 } -ru6 = { a = 12345678, b = -9999 } -ru9 = { a = { 111, 222, 333, 444 } } +after mu4, x = { a = { 11, 22, 33, 44 } } +rs1: { a = 'a' } +rs2: { a = 'a', b = 'b' } +rs3: { a = 'a', b = 'b', c = ' c' } +rs4: { a = 'a', b = 'b', c = ' c', d = 'd' } +rs5: { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e' } +rs6: { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e', f = 'f' } +rs7: { a = 'a', b = 'b', c = ' c', d = 'd', e = 'e', f = 'f', g = 'g' } +rs8: "Hello world!" +rt1: { a = 123 } +rt2: { a = 123, b = 456 } +rt3: { a = 123, b = 456, c = 789 } +rt4: { a = 123, b = 456, c = 789, d = -111 } +rt5: { a = 123, b = 456, c = 789, d = -999, e = 'x' } +ru1: { a = 12 } +ru2: { a = 12, b = -34 } +ru3: { a = 12, b = 34, c = -56 } +ru4: { a = 12, b = 34, c = 56, d = -78 } +ru5: { a = 1234, b = 'u' } +ru6: { a = 55555, b = 666 } +ru7: { a = -10001, b = -789, c = 'z' } +ru8: { a = 'x', b = 12345 } -- cgit