为什么 LuaJIT 不打印 `-mavx2`?

我正在尝试使用 LuaJIT 的 C ffi 为 C 库编写 Lua 绑定,但是遇到了这个问题。 只有在设置 -mavx2 标记时,LuaJIT 才不打印该行。

以下是重现此问题的步骤:

  1. 环境

    • CPU:Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
    • OS:Ubuntu 16.04,64位
    • GCC 版本:gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
    • LuaJIT 版本:2.0.4
    • 实际上我是在最新版本的 ZeroBrane Studio 中运行的
  2. test.c

    #include <stdint.h>
    
    uint64_t aux(const uint64_t b)
    {
        return b & b;
    }
    
    void test(uint64_t state)
    {
    
        uint64_t b[64];
    
        for (int i = 0; i < 64; i++)
        {
            b[i] = (state<<1) ^ state;
        }
    
        aux(b[0]);
    
    }
    
  3. 编译为共享库

    gcc -W -Wall -Winline -g -fPIC -shared -O3 -o libtest.so test.c # 没有 -mavx2
    gcc -W -Wall -Winline -g -fPIC -shared -O3 -mavx2 -o libtest.so test.c # 带有 -mavx2
    
  4. 在 LuaJIT 中使用库

    test.lua

    local ffi = require("ffi")
    local L = ffi.load("./libtest.so")
    
    ffi.cdef[[
    void test(uint64_t);
    ]]
    local s = ffi.new("uint64_t", 0);
    print("Hello!")
    L.test(s)
    print("Hello!")
    
  5. 输出

    没有 -mavx2:hello!\nhello\n,如预期。

    带有 -mavx2:hello!\n

点赞