带 goto 的扩展 asm(包括 gcc 文档中的示例)无法编译

2024-03-01

一些扩展的汇编语句使用goto限定符无法使用 GCC 10.1.0 进行编译。具体来说,

int foo(int count)
{
  asm goto ("dec %0; jb %l[stop]"
            : "+r" (count)
            :
            :
            : stop);
  return count;
stop:
  return 0;
}

(这是GCC 扩展 asm 文档中的示例) 无法编译并显示消息expected ‘:’ before string constant。删除"+r" (count)dec %0允许它成功编译,但无论我尝试什么,每当在同一 asm 语句中提供输出操作数作为 goto 标签时,它都会以同样的方式出错。


看来目前的发展海湾合作委员会文档 https://gcc.gnu.org/onlinedocs/gcc/您引用的内容适用于 GCC 的最新主干分支,不适用于 GCC 的任何官方版本。 GCC 官方版本目前尚不支持asm goto具有任何输出或输入/输出约束。你可以在godbolt https://godbolt.org/z/PfMfa8。最新的 trunk 可以工作,但 10.2 和 10.1 不行。修复方法是等待 GCC 的下一个主要版本(版本 11.x);下载并编译最新的主干版本;修改内联程序集,使其不依赖于任何输出或输出/输入约束。

直到最近GCC 文档,最高版本 10.x https://gcc.gnu.org/onlinedocs/gcc-10.2.0/gcc/有这样说:

asm goto 语句不能有输出。这是由于内部 编译器的限制:控制转移指令不能有 输出。如果汇编代码确实修改了任何内容,请使用“内存” clobber 强制优化器将所有寄存器值刷新到内存 如有必要,在 asm 语句后重新加载它们。

官方版本的所有文档和当前开发文档的列表可以在这里找到URL https://gcc.gnu.org/onlinedocs/。当前的开发文档位于页面底部。根据经验,您应该查阅您的特定 GCC 版本的文档。我相信所有 10.x 版本的文档与 GCC 网页上最新的 10.x 版本的文档相同。

最新版本的 CLANG/LLVM (11.0+) 确实支持此功能,但这也是相对较新的添加。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带 goto 的扩展 asm(包括 gcc 文档中的示例)无法编译 的相关文章

  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器

随机推荐

  • 读取文本文件块

    我有一个文本文件 其中每隔几行后就会在行开头重复一个特定字符 没有 之间的线数不固定 我能够找出发生这种情况的那些行 我想读一下中间的那些行 using StreamReader sr new StreamReader text file
  • 在 MongoDB 上执行聚合/集合交集

    我有一个查询 在对示例数据集执行一些聚合后 将以下示例视为中间数据 fileid 字段包含文件的 id 以及包含对相应文件进行了一些更改的用户数组的用户数组 id fileid 12 user a b c d id fileid 13 us
  • 我如何学习 ASP.NET? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 添加带动画的子视图

    任何人都可以帮我添加带有动画的子视图吗 我想添加带有像 CATransition 这样的动画的子视图 但是对于这个类 我们只有几种不同的动画类型 但我正在寻找实现它自己的动画的能力 视图的不同部分出现在不同的时间 也许存在一些例子或其他东西
  • watchOS2 通知模拟器

    我在 XCode 上的 watchOS2 模拟器中遇到了一个奇怪的错误 我使用 UILocalNotification 处理通知并修改静态通知的情节提要 但是当我检查值 Wants Sash Blur 并构建时 它会出现与 Carousel
  • 如何模拟反应路由器上下文

    我有相当简单的反应组件 链接包装器 如果路由处于活动状态 则会添加 活动 类 import React PropTypes from react import Link from react router const NavLink pro
  • C# 裁剪图像返回错误坐标

    几天来我一直在尝试使用 Selenium 和不同的裁剪方法来裁剪特定的图像 在我的代码之前有一个重要的说明 以下方法在两周前曾经有效 由于某种原因它现在返回一个坐标错误的图像 Go to site Driver Navigate GoToU
  • printf 忽略单个反斜杠 '\'

    我有这个代码 int main int argc char argv int i printf d s argc argv 1 return 0 如果我运行这段代码a out a b 我在用C shell 其输出为 a b 有什么方法可以将
  • 如何在大型机 COBOL 中“休眠”?

    我想我正在使用 Enterprise COBOL for z OS 模拟标准 C 库的 sleep 函数等功能的技术是什么 可能最简单的方法是使用语言环境可调用服务 https www ibm com docs en zos 2 4 0 t
  • 始终独立于目标执行 Ant 操作

    有没有办法在 Ant 构建文件中指定诸如 之类的操作 每次 ant 读取构建文件时都会执行该操作 无论调用的目标是什么 背景是 我希望在模板不存在时自动从模板创建 properties 文件 我知道 我可以指定一个执行此操作的目标 然后将其
  • 使用依赖项从 Swift 2.3 迁移到 Swift 3

    我正在努力将我的项目从 Swift 2 3 迁移到 Swift 3 但我通过 Cocoapods 使用的第三方框架遇到了问题 其中许多已经升级到 Swift 3 但也有一些尚未升级 当我构建项目时 出现错误 使用 Swift 2 3 编译的
  • 将图像放置在 CSS 中另一个现有的 `` 上

    我正在做一个页面 其中显示视频的缩略图 当您单击时 它会弹出一个 YouTube 视频 这个缩略图是 195x195 的简单图像 但最终客户端会按原样上传 我想通过 CSS 在视频图像上添加一个 播放图标 与 IE7 兼容 我不知道如何处理
  • 如何将本地 ORC 文件转换为 CSV?

    我的本地计算机上有一个 ORC 文件 我需要其中的任何合理格式 例如 CSV JSON YAML 如何将 ORC 转换为 CSV Download https orc apache org docs java tools html 解压文件
  • 访问类内的函数指针

    我在类中定义函数指针并尝试通过该类的实例访问它 但它显示错误 这是代码 1 include
  • 无法在 Eclipse 中将项目添加到 Tomcat 服务器

    我无法将我的项目添加到 Eclipse 中的服务器 这是为什么 我安装了所有必要的工具 Web Dev Java EE 服务器适配器和 Tomcat 本身 一切 我配置了运行时环境 将所有 Java 版本调整为 JDK 6 因为它应该在 T
  • 有效计算边界自适应邻域平均值

    我有一张图像 其值范围为 0 到 1 我喜欢做的是简单的平均 但是 更具体地说 对于图像边界处的单元格 我想计算位于图像范围内的邻域 内核部分的像素平均值 事实上 这可以归结为适应 平均公式 的分母 即总和除以的像素数 我设法做到这一点 如
  • 将风格应用于第一个孩子?

    有没有某种方法可以将样式应用于容器的第一个 或最后一个或第 n 个 子容器 任何包含子容器的容器 我正在尝试自定义选项卡项目的外观 以便第一个选项卡具有与其他选项卡不同的边框半径 这就是我现在所拥有的
  • 让 Java servlet 充当代理的代码?

    我有两个 Java Web 应用程序 它们有一个映射到特定 URL 的 servlet red war WEB INF classes com me myorg red RedServlet maps to http red example
  • 一个更好的程序来计算数字的平方根

    我是 C 编程语言的初学者 我的任务是编写一个程序来计算自然数的平方根 而不使用math h或任何其他库函数 除了stdio h 看看我们的合作伙伴int自始至终 对于非平方数 我们求 n 的平方根的下限 现在我已经编写了这个程序 但它只适
  • 带 goto 的扩展 asm(包括 gcc 文档中的示例)无法编译

    一些扩展的汇编语句使用goto限定符无法使用 GCC 10 1 0 进行编译 具体来说 int foo int count asm goto dec 0 jb l stop r count stop return count stop re