jjzjj

javascript - 为什么 asm.js 项目在 Chrome 中运行速度比 FireFox 快?

我已经使用emscripten将我大学类(class)的一个游戏引擎项目从C/C++移植到JavaScript。asm.js优化标志已设置,我一直在测量性能。但令人费解的是,在Firefox中的性能很差。而该项目在Chrome和Opera中运行良好。鉴于FireFox是使用asm.js优化的浏览器,这对我来说没有意义。该项目是一款使用SDL和WebGL的速降激流回旋赛车游戏。在我的笔记本电脑上运行Firefox时,分析器显示该演示完全受CPU限制,瓶颈出现在_SDL_LockSurface()和_TTF_RenderText_Solid()周围。这些用于呈现动态文本等。然而在Chrom

c++ - 在 GNU 的 C++ 代码中使用 C 头文件。包含内联程序集 : impossible constraint in 'asm' 的错误

我有一个奇怪的。我正在使用供应商头文件开发嵌入式系统。我正在使用GCC4.6.3编译文件。我想为我的代码使用C++,我有错误我无法弄清楚。我正在运行供应商示例程序,我所做的只是将main.c文件的名称更改为main.cpp。因此,我假设头文件由C++编译器解释。其中之一包含以下几行:__attribute__((naked))staticreturn_typesignature\{\__asm(\"svc%0\n"\"bxr14"::"I"(number):"r0"\);\}如果文件名是main.c,则文件可以正确编译,我认为这是因为C编译器正在处理该文件。如果我使用C++,我得到的错

c++ - 从 DLL 导出 ASM 函数 - Visual Studio C++

我已经创建了Dll项目。我创建了具有一个功能的myasm.asm文件:.486.modelflat,stdcall.codeMyProc1procx:DWORD,y:DWORDxoreax,eax//......//retMyProc1endpend这是我的头文件:#pragmaonce#include#ifdefLAB1DLL_EXPORTS#defineLAB1DLL_API__declspec(dllexport)#else#defineLAB1DLL_API__declspec(dllimport)#endifextern"C"{LAB1DLL_APIint_stdcallMy

c++ - 指向 C++ 中内联 __asm block 的指针

所以我一直在VS2010中使用__asmblock,但我没能找到更好的方法来获取指向汇编block开头的指针。我知道如何做到这一点的唯一方法是声明一个void函数。一个问题是void函数在我的程序集block之前和之后都有自己的程序集,我必须通过获取函数的真实地址并添加偏移量来进行补偿。例子:C++voidmyfunc(){__asm{nopnopnopret}}会产生类似这样的装配:pushebpmovebp,espaddesp,8nopnopnopretnmovesp,ebppopebpretnmyfunc()如果执行,很可能会出错。 最佳答案

C++ ASM Inline如何使用boolean?

说我有这样的东西..boolisPatched;我有一些其他GUI,我在其中设置了isPatched=true;和isPatched=false;,isPatched=!isPatched;void__declspec(naked)test(void){//__asm{PUSHADPUSHFDMOVEAX,isPatchedCMPEAX,0jenoPatchedMOVEAX,DWORDPTRDS:[ESI+0x77C]MOVJohn.oldA,EAXMOVEAX,John.AMOVDWORDPTRDS:[ESI+0x77C],EAXJMPfinishnoPatched:PUSHEDXM

c++ - 在 x64 上获取没有 __asm 的 SSE 版本

我正在尝试构建VS2010CRT库的某些函数的略微修改版本,除了它尝试访问可能包含指令集体系结构版本(ISA)的全局变量的部分外,一切都很好:if(__isa_available>__ISA_AVAILABLE_SSE2){//...}elseif(__isa_available==__ISA_AVAILABLE_SSE2){//...}我在程序集文件中找到它应该包含的值__ISA_AVAILABLE_X86equ0__ISA_AVAILABLE_SSE2equ1__ISA_AVAILABLE_SSE42equ2__ISA_AVAILABLE_AVXequ3如何以及在哪里为__isa_

c++ - 使用 Visual C++ 环境和 "Asm"关键字作为 Assembler IDE 的替代方案?

只需阅读一本C++书籍,您就可以通过使用asm关键字从字面上将汇编程序放入C++。这是否意味着,如果有人想使用VisualStudio编写汇编程序,我可以简单地创建一个C++main方法,然后将汇编程序放入其中并将其作为C++程序执行?编译器会简单地运行嵌入汇编程序的C++,就好像它只是一个汇编程序一样?我的问题源于缺乏适合Assembler的合适IDE。 最佳答案 当您使用C++编译器时,它会向您的程序添加不在intmain()中的额外代码。如果你曾经反编译过一个简单的helloworld程序,你会注意到它在intmain()之前

c++ - asm.js-如何实现函数指针

注意:这个问题纯粹是关于asm.js的,而不是关于C++或任何其他编程语言的。标题已经说过:如何有效地实现函数指针?我在网上找不到任何东西,所以我想在这里问。编辑:我想在正在使用的编译器中实现虚函数。在C++中,我将执行以下操作来生成vtable:#includeclassBase{public:virtualvoiddoSomething()=0;};classDerived:publicBase{public:voiddoSomething(){std::coutdoSomething();return0;}更准确地说;如何在不需要纯JavaScript的情况下在asm.js中生成

c++ - 什么是 __asm volatile ("pause"::: "memory");做?

我正在查看具有以下代码结构的开源C++项目:while(true){//Dosomethingworkif(some_condition_becomes_true)break;__asmvolatile("pause":::"memory");}最后一条语句是做什么的?我知道__asm意味着它是一个汇编指令,我发现一些关于pause指令的帖子说线程有效地暗示核心释放资源并给其他线程更多资源(在超线程的上下文中)。但是:::和memory有什么作用呢? 最佳答案 它是_mm_pause()和一个编译内存屏障,包装在一个GNUCExte

c++ - AVR-C 错误 : expected '=' , ','、 ';'、 'asm' 或 '__attribute__' token 之前的 '<'

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭9年前。我目前正在尝试获取为ArduinoUSB主机编写的代码库shield并将其与Arduino核心库分离,以便我可以在非Arduino微Controller项目中使用代码。通过查看代码,Arduino代码库没有太多硬依赖性,但我遇到了一些奇怪的错误,这可能是由于Arduino构建系统和LUFAbuildsystem之间的差异造成的.具体来说,我在大约75%的头