From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id 29FC19DC620; Mon, 29 Jan 2024 13:52:25 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 29FC19DC620 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1706525545; bh=+ZVmITyrCnexZuGsTNpLvmlUDmCa2c88TMflbHRYNRA=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=HkV/qS8q5RSxEAjNHAmdPg94nA9jZY5s7Sy8kk4Kl4aJNpvyHe/i/O36dsdsF+gFA Z04KK2fBjQrWSsbgoOPU99T1chFlqBQQPCPBxbpyDWYviFkOClXmywMOiAFndZ35Jk slK3TxzMogPN8//sWAbK4XMllSoHGBZNosG0/Ik0= Received: from smtp32.i.mail.ru (smtp32.i.mail.ru [95.163.41.73]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id CA5D69C2033 for ; Mon, 29 Jan 2024 13:49:27 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org CA5D69C2033 Received: by smtp32.i.mail.ru with esmtpa (envelope-from ) id 1rUPCg-0000000BQ6r-42zI; Mon, 29 Jan 2024 13:49:27 +0300 To: Maxim Kokryashkin , Sergey Bronnikov Date: Mon, 29 Jan 2024 13:45:06 +0300 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Mailru-Src: smtp X-4EC0790: 10 X-7564579A: 78E4E2B564C1792B X-77F55803: 4F1203BC0FB41BD96A58C36AA2E99649EAAC3983AE61A60E84CE716657D9D41E182A05F5380850401AB20D314FF1A29B33594132A326AF8B3669ADF97A524824DCA4176470581478357F9E8F5AEEDED5 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE70186A8DAAA7CBDB1EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F79006379BBD3AAEA3DAB18A8638F802B75D45FF36EB9D2243A4F8B5A6FCA7DBDB1FC311F39EFFDF887939037866D6147AF826D88FB1648582727FB2BE1BF1E404F07B8E07898E3F03A5545DCC7F00164DA146DAFE8445B8C89999728AA50765F7900637B18CEC08E50EEB57389733CBF5DBD5E9C8A9BA7A39EFB766F5D81C698A659EA7CC7F00164DA146DA9985D098DBDEAEC886A7C529F68B8E5CF6B57BC7E6449061A352F6E88A58FB86F5D81C698A659EA73AA81AA40904B5D9A18204E546F3947C68E4D7E803FA7AD52D242C3BD2E3F4C64AD6D5ED66289B523666184CF4C3C14F6136E347CC761E07725E5C173C3A84C3C711CAE753D09F11BA3038C0950A5D36B5C8C57E37DE458B330BD67F2E7D9AF16D1867E19FE14079C09775C1D3CA48CFED8438A78DFE0A9E1DD303D21008E298D5E8D9A59859A8B6B372FE9A2E580EFC725E5C173C3A84C3AA8C68A3574AB3B435872C767BF85DA2F004C90652538430E4A6367B16DE6309 X-C1DE0DAB: 0D63561A33F958A5112FC968E20092CB5002B1117B3ED696CCA1280538A721C3A13BD6A4B0E00B96823CB91A9FED034534781492E4B8EEADF035437B6AEB70F4C79554A2A72441328621D336A7BC284946AD531847A6065A535571D14F44ED41 X-C8649E89: 1C3962B70DF3F0ADE00A9FD3E00BEEDF3FED46C3ACD6F73ED3581295AF09D3DF87807E0823442EA2ED31085941D9CD0AF7F820E7B07EA4CF3B3756D96D444B4847DFB1B3CB008E0D6380EB36C85646BB24CF239DF62CFD25065B4C0772F80DDC8FB01E7B8BF01A693EF4C9A38309F4E8B718120DE96C5CC572624ABBBF80010DC226CC413062362A913E6812662D5F2A5EAB5682573093F7837F15F2B5E4A70B33F2C28C22F508233FCF178C6DD14203 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojmd9AG1X07oS1hgg5gSbqgQ== X-Mailru-Sender: 11C2EC085EDE56FAC07928AF2646A769F51DA58CC47D396933594132A326AF8B3669ADF97A524824B7CBEF92542CD7C88B0A2698F12F5C9EC77752E0C033A69E86920BD37369036789A8C6A0E60D2BB63A5DB60FBEB33A8A0DA7A0AF5A3A8387 X-Mras: Ok Subject: [Tarantool-patches] [PATCH v2 luajit 06/26] test: enable in LuaJIT-tests X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Sergey Kaplun via Tarantool-patches Reply-To: Sergey Kaplun Cc: tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" This patch removes unused `dofile()`. Also, it uses the basename of the ctest library to be loaded via ffi. It adds groups with names of subtests and enables the test in . Complex type is undefined on Windows, so the correponding tests are not enabled for this platform. Fastcalls are enabled only for the x86 architecture. Stdcalls are enabled only for Windows on x86. Tests with calls with 10 arguments with sizes less than 8 bits are dummy for M1. This suite lacks a mechanism to skip subtests satisfying complicated conditions, so it is done manually by the corresponding `if` check. Part of tarantool/tarantool#9398 --- test/LuaJIT-tests/lib/ffi/ffi_call.lua | 185 +++++++++++++------------ test/LuaJIT-tests/lib/ffi/index | 1 + 2 files changed, 97 insertions(+), 89 deletions(-) diff --git a/test/LuaJIT-tests/lib/ffi/ffi_call.lua b/test/LuaJIT-tests/lib/ffi/ffi_call.lua index 1eb5e906..0844b686 100644 --- a/test/LuaJIT-tests/lib/ffi/ffi_call.lua +++ b/test/LuaJIT-tests/lib/ffi/ffi_call.lua @@ -1,8 +1,5 @@ - local ffi = require("ffi") -dofile("../common/ffi_util.inc") - local tonumber = tonumber ffi.cdef[[ @@ -73,81 +70,92 @@ double __stdcall stdcall_dd(double a, double b); float __stdcall stdcall_ff(float a, float b); ]] -local C = ffi.load("../clib/ctest") +local C = ffi.load("ctest") -assert(C.call_i(-42) == -41) -assert(C.call_ii(-42, 17) == -42+17) -assert(C.call_10i(-42, 17, 12345, 9987, -100, 11, 51, 0x12345678, 338, -78901234) == -42+17+12345+9987-100+11+51+0x12345678+338-78901234) +do --- int enum double float args + assert(C.call_i(-42) == -41) + assert(C.call_ii(-42, 17) == -42+17) -assert(C.call_ie(123) == 124) + assert(C.call_ie(123) == 124) -assert(tonumber(C.call_ji(0x123456789LL, -17)) == tonumber(0x123456789LL-17)) -assert(tonumber(C.call_ij(-17, 0x123456789LL)) == tonumber(0x123456789LL-17)) -assert(tonumber(C.call_jj(-42, 17)) == -42+17) -assert(tonumber(C.call_jj(0x123456789abcdef0LL, -0x789abcde99887766LL)) == tonumber(0x123456789abcdef0LL-0x789abcde99887766LL)) + assert(tonumber(C.call_ji(0x123456789LL, -17)) == tonumber(0x123456789LL-17)) + assert(tonumber(C.call_ij(-17, 0x123456789LL)) == tonumber(0x123456789LL-17)) + assert(tonumber(C.call_jj(-42, 17)) == -42+17) + assert(tonumber(C.call_jj(0x123456789abcdef0LL, -0x789abcde99887766LL)) == + tonumber(0x123456789abcdef0LL - 0x789abcde99887766LL)) -assert(C.call_dd(12.5, -3.25) == 12.5-3.25) -assert(C.call_10d(-42.5, 17.125, 12345.5, 9987, -100.625, 11, 51, 0x12345678, 338, -78901234.75) == -42.5+17.125+12345.5+9987-100.625+11+51+0x12345678+338-78901234.75) + assert(C.call_dd(12.5, -3.25) == 12.5-3.25) -assert(C.call_ff(12.5, -3.25) == 12.5-3.25) -assert(C.call_10f(-42.5, 17.125, 12345.5, 9987, -100.625, 11, 51, 0x123456, 338, -789012.75) == -42.5+17.125+12345.5+9987-100.625+11+51+0x123456+338-789012.75) + assert(C.call_ff(12.5, -3.25) == 12.5-3.25) -assert(C.call_idifjd(-42, 17.125, 0x12345, -100.625, 12345678901234, -789012.75) == -42+17.125+0x12345-100.625+12345678901234-789012.75) + assert(C.call_idifjd(-42, 17.125, 0x12345, -100.625, 12345678901234, -789012.75) == + -42 + 17.125 + 0x12345 - 100.625 + 12345678901234 - 789012.75) +end + +do --- 10 ints, 10 floats, 10 doubles + if not (jit.os == "OSX" and jit.arch == "arm64") then -- NYI + assert(C.call_10i(-42, 17, 12345, 9987, -100, 11, 51, 0x12345678, 338, -78901234) == + -42 + 17 + 12345 + 9987 - 100 + 11 + 51 + 0x12345678 + 338 - 78901234) + assert(C.call_10f(-42.5, 17.125, 12345.5, 9987, -100.625, 11, 51, 0x123456, 338, -789012.75) == + -42.5 + 17.125 + 12345.5 + 9987 - 100.625 + 11 + 51 + 0x123456 + 338 - 789012.75) + end + assert(C.call_10d(-42.5, 17.125, 12345.5, 9987, -100.625, 11, 51, 0x12345678, 338, -78901234.75) == + -42.5 + 17.125 + 12345.5 + 9987 - 100.625 + 11 + 51 + 0x12345678 + 338 - 78901234.75) +end -do +do --- pointers local a = ffi.new("int[10]", -42) assert(C.call_p_i(a) == -42+1) assert(tonumber(ffi.cast("intptr_t", C.call_p_p(a+3))) == tonumber(ffi.cast("intptr_t", a+4))) assert(C.call_pp_i(a+8, a+5) == 3) end --- vararg -assert(C.call_ividi(-42, ffi.new("int", 17), 12.5, ffi.new("int", 131)) == -42+17+12.5+131) +do --- vararg + assert(C.call_ividi(-42, ffi.new("int", 17), 12.5, ffi.new("int", 131)) == -42+17+12.5+131) +end -- complex -if pcall(function() return C.call_dd_cd end) then - do - local c = C.call_dd_cd(12.5, -3.25) - assert(c.re == 12.5 and c.im == -3.25*2) - end - do - local c1 = ffi.new("complex", 12.5, -3.25) - local cz = C.call_cd(c1) - assert(cz.re == 12.5+1 and cz.im == -3.25-2) - end - do - local c1 = ffi.new("complex", 12.5, -3.25) - local c2 = ffi.new("complex", -17.125, 100.625) - local cz = C.call_cdcd(c1, c2) - assert(cz.re == 12.5-17.125 and cz.im == -3.25+100.625) - end +do --- complex double, 2 double args -windows + local c = C.call_dd_cd(12.5, -3.25) + assert(c.re == 12.5 and c.im == -3.25*2) +end +do --- complex double, 1 complex arg -windows + local c1 = ffi.new("complex", 12.5, -3.25) + local cz = C.call_cd(c1) + assert(cz.re == 12.5+1 and cz.im == -3.25-2) +end +do --- complex double, 2 complex args -windows + local c1 = ffi.new("complex", 12.5, -3.25) + local c2 = ffi.new("complex", -17.125, 100.625) + local cz = C.call_cdcd(c1, c2) + assert(cz.re == 12.5-17.125 and cz.im == -3.25+100.625) +end - do - local c = C.call_ff_cf(12.5, -3.25) - assert(c.re == 12.5 and c.im == -3.25*2) - end - do - local c1 = ffi.new("complex float", 12.5, -3.25) - local cz = C.call_cf(c1) - assert(cz.re == 12.5+1 and cz.im == -3.25-2) - end - do - local c1 = ffi.new("complex float", 12.5, -3.25) - local c2 = ffi.new("complex float", -17.125, 100.625) - local cz = C.call_cfcf(c1, c2) - assert(cz.re == 12.5-17.125 and cz.im == -3.25+100.625) - end +do --- complex float, 2 float args -windows + local c = C.call_ff_cf(12.5, -3.25) + assert(c.re == 12.5 and c.im == -3.25*2) +end +do --- complex float, 1 complex float arg -windows + local c1 = ffi.new("complex float", 12.5, -3.25) + local cz = C.call_cf(c1) + assert(cz.re == 12.5+1 and cz.im == -3.25-2) +end +do --- complex float, 2 complex float args -windows + local c1 = ffi.new("complex float", 12.5, -3.25) + local c2 = ffi.new("complex float", -17.125, 100.625) + local cz = C.call_cfcf(c1, c2) + assert(cz.re == 12.5-17.125 and cz.im == -3.25+100.625) end -- structs -do +do --- struct {int; int;} arg, return struct {int; int;} local s1 = ffi.new("s_ii", -42, 17) local sz = C.call_sii(s1) assert(s1.x == -42 and s1.y == 17) assert(sz.x == -42 and sz.y == 17) end -do +do --- struct {int64_t; int64_t;} arg, return struct {int64_t; int64_t;} local s1 = ffi.new("s_jj", 0x123456789abcdef0LL, -0x789abcde99887766LL) local sz = C.call_sjj(s1) assert(s1.x == 0x123456789abcdef0LL) @@ -156,28 +164,28 @@ do assert(sz.y == -0x789abcde99887766LL) end -do +do --- struct {float; float;} arg, return struct {float; float;} local s1 = ffi.new("s_ff", 12.5, -3.25) local sz = C.call_sff(s1) assert(s1.x == 12.5 and s1.y == -3.25) assert(sz.x == 12.5 and sz.y == -3.25) end -do +do --- struct {double; double;} arg, return struct {double; double;} local s1 = ffi.new("s_dd", 12.5, -3.25) local sz = C.call_sdd(s1) assert(s1.x == 12.5 and s1.y == -3.25) assert(sz.x == 12.5 and sz.y == -3.25) end -do +do --- struct composed of 8 ints arg, same result local s1 = ffi.new("s_8i", -42, 17, 12345, 9987, -100, 11, 51, 0x12345678) local sz = C.call_s8i(s1) assert(s1.a+s1.b+s1.c+s1.d+s1.e+s1.f+s1.g+s1.h == -42+17+12345+9987-100+11+51+0x12345678) assert(sz.a+sz.b+sz.c+sz.d+sz.e+sz.f+sz.g+sz.h == -42+17+12345+9987-100+11+51+0x12345678) end -do +do --- 2 struct {int; int;} args, return struct {int; int;} local s1 = ffi.new("s_ii", -42, 17) local s2 = ffi.new("s_ii", 0x12345, -98765) local sz = C.call_siisii(s1, s2) @@ -186,7 +194,7 @@ do assert(sz.x == -42+0x12345 and sz.y == 17-98765) end -do +do --- 2 struct {float; float;} args, return struct {float; float;} local s1 = ffi.new("s_ff", 12.5, -3.25) local s2 = ffi.new("s_ff", -17.125, 100.625) local sz = C.call_sffsff(s1, s2) @@ -195,7 +203,7 @@ do assert(sz.x == 12.5-17.125 and sz.y == -3.25+100.625) end -do +do --- 2 struct {double; double;} args, return struct {double; double;} local s1 = ffi.new("s_dd", 12.5, -3.25) local s2 = ffi.new("s_dd", -17.125, 100.625) local sz = C.call_sddsdd(s1, s2) @@ -204,7 +212,7 @@ do assert(sz.x == 12.5-17.125 and sz.y == -3.25+100.625) end -do +do --- 2 struct composed of 8 ints args, same struct in result local s1 = ffi.new("s_8i", -42, 17, 12345, 9987, -100, 11, 51, 0x12345678) local s2 = ffi.new("s_8i", 99, 311, 98765, -51, 312, 97, 17, 0x44332211) local sz = C.call_s8is8i(s1, s2) @@ -215,7 +223,7 @@ do assert(sz.h == 0x12345678+0x44332211) end -do +do --- int, struct composed of 8 ints, int local s1 = ffi.new("s_8i", -42, 17, 12345, 9987, -100, 11, 51, 0x12345678) local sz = C.call_is8ii(19, s1, -51) assert(s1.a+s1.b+s1.c+s1.d+s1.e+s1.f+s1.g+s1.h == -42+17+12345+9987-100+11+51+0x12345678) @@ -225,42 +233,41 @@ do end -- target-specific -if jit.arch == "x86" then +do --- fastcall void int double +x86 assert(C.fastcall_void() == 1) assert(C.fastcall_i(-42) == -41) assert(C.fastcall_ii(-42, 17) == -42+17) assert(C.fastcall_iii(-42, 17, 139) == -42+17+139) assert(tonumber(C.fastcall_ji(0x123456789LL, -17)) == tonumber(0x123456789LL-17)) assert(C.fastcall_dd(12.5, -3.25) == 12.5-3.25) +end - do - local a = ffi.new("int[10]", -42) - assert(C.fastcall_pp_i(a+8, a+5) == 3) - end - - do - local s1 = ffi.new("s_ii", -42, 17) - local s2 = ffi.new("s_ii", 0x12345, -98765) - local sz = C.fastcall_siisii(s1, s2) - assert(s1.x == -42 and s1.y == 17) - assert(s2.x == 0x12345 and s2.y == -98765) - assert(sz.x == -42+0x12345 and sz.y == 17-98765) - end +do --- fastcall 2 pointer args +x86 + local a = ffi.new("int[10]", -42) + assert(C.fastcall_pp_i(a+8, a+5) == 3) +end - do - local s1 = ffi.new("s_dd", 12.5, -3.25) - local s2 = ffi.new("s_dd", -17.125, 100.625) - local sz = C.fastcall_sddsdd(s1, s2) - assert(s1.x == 12.5 and s1.y == -3.25) - assert(s2.x == -17.125 and s2.y == 100.625) - assert(sz.x == 12.5-17.125 and sz.y == -3.25+100.625) - end +do --- fastcall 2 struct {int; int;} args +x86 + local s1 = ffi.new("s_ii", -42, 17) + local s2 = ffi.new("s_ii", 0x12345, -98765) + local sz = C.fastcall_siisii(s1, s2) + assert(s1.x == -42 and s1.y == 17) + assert(s2.x == 0x12345 and s2.y == -98765) + assert(sz.x == -42+0x12345 and sz.y == 17-98765) +end - if jit.os == "Windows" then - assert(C.stdcall_i(-42) == -41) - assert(C.stdcall_ii(-42, 17) == -42+17) - assert(C.stdcall_dd(12.5, -3.25) == 12.5-3.25) - assert(C.stdcall_ff(12.5, -3.25) == 12.5-3.25) - end +do --- fastcall 2 struct {double; double;} args +x86 + local s1 = ffi.new("s_dd", 12.5, -3.25) + local s2 = ffi.new("s_dd", -17.125, 100.625) + local sz = C.fastcall_sddsdd(s1, s2) + assert(s1.x == 12.5 and s1.y == -3.25) + assert(s2.x == -17.125 and s2.y == 100.625) + assert(sz.x == 12.5-17.125 and sz.y == -3.25+100.625) end +do --- stdcall +x86 +windows + assert(C.stdcall_i(-42) == -41) + assert(C.stdcall_ii(-42, 17) == -42+17) + assert(C.stdcall_dd(12.5, -3.25) == 12.5-3.25) + assert(C.stdcall_ff(12.5, -3.25) == 12.5-3.25) +end diff --git a/test/LuaJIT-tests/lib/ffi/index b/test/LuaJIT-tests/lib/ffi/index index 8d833107..599a0182 100644 --- a/test/LuaJIT-tests/lib/ffi/index +++ b/test/LuaJIT-tests/lib/ffi/index @@ -4,6 +4,7 @@ copy_fill.lua err.lua ffi_arith_ptr.lua ffi_bitfield.lua +ffi_call.lua istype.lua jit_array.lua jit_complex.lua -- 2.43.0