2018-10-03 19:47

# SSE2从golang中的打包数据中提取浮点数

I'm writing an assembly function in Golang. To simplify let's suppose that I want to do the following function:

``````func sseSumOfMinimums (d1, d2 [2]float64) float64
``````

It will compute the minimum of d1[0], d2[0] and the minimum of d1[1] and d2[1] and compute the sum

In assembly I do:

``````TEXT ·sseSum(SB), \$0-40
MINPD X0, X1 // compute pair minimums and store to X1
MOVSD X1, X2 // move first min to X2
// How do I move second float of X1 to X3?
MOVSD X3, ret+32(FP)
``````

The part that I'm missing is how to extract the second scalar from X1 to X3

#### 图片转代码服务由CSDN问答提供 功能建议

``` ``` func sseSumOfMinimums（d1，d2 [2] float64）float64
\  n
它将计算d1 [0]，d2 [0]的最小值和d1 [1]和d2 [1]的最小值并计算总和

In 程序集我这样做：

TEXT·sseSum（SB），\$ 0-40
MOVUPD d1 + 0（FP），X0 //将d1加载到X0
MOVUPD d2 + 16（  FP），X1 //将d1加载到X1
MINPD X0，X1 //计算成对的最小值并存储到X1
MOVSD X1，X2 //将第一分钟移到X2
//如何将X1的第二个浮点数移动到X3
` `
``` 点赞 写回答 关注问题 收藏 分享 邀请回答 ```
``` 1条回答 默认 最新 dqf60304 2018-10-03 20:02 已采纳 Does Go not guarantee stack alignment so you could use a memory source operand for minpd? Also, I'm not familiar with Go; is its float really IEEE binary64, which most languages (including x86 asm) call double? It's weird to see float in the source and pd (packed double) instructions used in the asm. The overhead of calling a standalone hand-written-asm function for this is going to be higher than letting a compiler do it with scalar minsd, for a single pair. Especially with Go's crappy calling convention, passing args in memory and storing the return value to memory. An optimizing Go compiler with an LLVM or gcc back-end should get the job done with inline code with lower latency and fewer uops of throughput cost than calling this function, even with the optimization given below. Or if you're lucky, the compiler will use minpd for you. But for the actual problem, after minpd x0, x1, what you need is a horizontal sum of xmm1. Fastest way to do horizontal float vector sum on x86. You should use movaps to copy xmm registers, even if you only care about the low 64 bits. movsd x1, x2 merges into the low 64 bits of xmm2, creating a false dependency on the old value and costing a shuffle uop. minpd x0, x1 movhps x1, x0 // high 64 bits of xmm1 => low 64 of xmm0 addsd x1, x0 You could movaps x1, x2 and unpckhpd x2,x2, but that would cost an extra movapd or movaps which you can avoid by using movhps. (movaps / movups is shorter than movapd, smaller code-size, and otherwise exactly equivalent to movapd / movupd on all CPUs for loads, stores, and reg-reg copies.) 点赞 打赏 评论 分享 报告相同问题？ 提交 关注问题 相关推荐 更多相似问题 SSE2从golang中的打包数据中提取浮点数 2018-10-03 19:47 回答 1 已采纳 Does Go not guarantee stack alignment so you could use a memory source operand for minpd? Also, I 使用Golang中的regexp从URL提取子域 2018-03-13 13:16 回答 1 已采纳 The url package has a function parse that allows you to parse an URL. The parsed URL instance has 如何在MySQL的Golang GORM中从查询中提取数据？ databasemysql 2017-12-22 21:55 回答 1 已采纳 You need to retrieve data into some variable to be able to use it later: p := Profile{} res := db golang如何比较浮点数的大小 2021-01-08 01:26 浮点数储存至内存中时，2的-1、-2……-n次方不能精确的表示小数部分，所以再把这个数从地址中取出来进行计算就出现了偏差。 package main import ( errors fmt github.com/shopspring/decimal ) func ... golang 浮点数精度问题 2019-06-04 17:12 mario08的博客 一，Golang浮点数存在一些问题 1，两个浮点数相加减，可能不准确 (1)相减 x := 74.96 y := 20.48 b := x - y fmt.Println(b) //output: 54.47999999999999 (2)相加 var a = 0.6 fmt.Println(a + 0.7) //output: 1.... golang中json反序列化可能遇到的问题 2020-12-26 02:43 在golang中，当浮点数超过一定数值的时候，golang会把它弄成科学计数法的形式进行显示（好像只要大于七位数就变成科学计数法了） var val float64 val = 1000000 fmt.Println(val) // ==> 1e+06 而在日常开发中，...如何从golang的数组中提取字符？ 2017-08-21 07:49 回答 2 已采纳 Start by seeding the pseudorandom number generator. For example, package main import ( "fmt" 从golang中传入的https请求中提取通用名称 2019-06-03 21:13 回答 1 已采纳 You can retrieve it from the VerifiedChains member of the request's TLS field: func helloHandler( 浮点数在Golang中返回零 2017-02-12 02:32 回答 2 已采纳 I've done some modifications to your code and it should run as you expected: package main import Golang 从 Json 串中快速取出需要的字段 2020-07-05 21:58 qhh0205的博客 在 web 编程中很多情况下接口的数据是 json 格式，在我们拿到接口的 json 数据后如何方便地从中提取出需要的字段呢？我们可以自定义一个结构体，然后通过 Golang 的标准库 json 解析到我们定义的结构体中。但是当 ... golang 浮点数操作 2018-08-02 10:57 冷月醉雪的博客 数据库中金额元存储的数据结构使用的是decimal(15,2)，golang中使用float64保存变量内容。通过转换将 float64 -&gt; int64 最简单的方式：int64(float64 * 100)，但是由于浮点数在计算机内的表示方式问题导致有... Golang如何优雅地提取JSON数据中需要的字段数据 2018-10-13 10:12 有理叔的博客 JSON数据是我们开发中经常遇到的一种数据格式，一般通用的做法是，我们通过建立实体类，然后利用一些框架将JSON数据转化为对应的实体类对象，这样我们就可以方便地访问JSON数据了。 但是有些时候，一个JSON对象很大... 如何从Golang的http响应中读取压缩数据 2018-10-12 05:51 回答 2 已采纳 I solved this by reading this code: https://gist.github.com/xyproto/f4915d7e208771f3adc4 here is ajax如何从golang代码中获取数据？ ajaxhtmljquery 2018-05-02 06:36 回答 1 已采纳 Send the response header of Data function in json format and write the response of json which can 如何从Golang中的XML文件提取多个字段 xml 2018-09-28 03:22 回答 1 已采纳 Usually you should at least try something before posting a question on Stack Overflow, but since i Golang 浮点数处理 2019-03-04 19:53 weixin_34343308的博客 2. 就算使用符号 _ , 需要报错的地方还得报错 3. 所有除0的浮点数都不会报错 4. 所有除0的复数都不会报错 详见:  官方文档 转载于:https://my.oschina.net/shou1156226/blog/3017830 Golang学习篇——提取Json数据中指定字段数据 2020-04-21 13:46 Word哥的博客 1.json-iterator介绍 jsoniter （ json-iterator ）是一款快且灵活的 JSON 解析器，同时提供 Java 和 Go 两个版本Jsoniter 是最快的 JSON 解析. ...2.提取Json指定字段数据 有时候，例如一个JSON对象很大... Golang数据类型转换—-16进制转整数，解析8位有符号16进制整数 2021-01-07 20:25 这是个16进制字符串转无符号8位整数后再转成有符号的8位整数的过程， 之所以这么转是因为直接ParseInt(s, 16, 8)会抛出异常， 因为默认的strconv的ParseInt貌似不支持负数和浮点数的解析， 所以先将其转成uint64， ...从golang的echo请求中提取JSON 2016-12-31 18:04 回答 2 已采纳 This is how I did it: json_map := make(map[string]interface{}) err := json.NewDecoder(c.Request() Golang比较浮点数，运算 2019-07-08 14:20 mrtwenty的博客 Golang浮点数比较和运算会出现误差，我们来看看下面的例子: package main import "fmt" func main(){ var a float64=1.5 var b float64=1.3 var result float64=a-b if result==0.2 { fmt.Println("相等... 没有解决我的问题, 去提问```
``` 点击登录 提问题 ◇ 欢迎建议意见 ◇ 回答问题能得到什么 ◇ 如何写高质量的提问和回答 ◇ 问答平台结题规则说明 加急问题 ¥100 谷歌翻译api有没有破解办法，是不是唯一解决办法就是收费 ¥100 谁知道哪个app上面可以获取自己想要的链接。或者是购买链接 ¥100 求不定方程式整数解问题。 ¥100 yii2的advance版本使用yii2-rest-rbac的示例，认证方式oauth2 ¥100 使用https后，net4.6编译的web应用的oracle连接池异常，不能持续保持连接。但是在普通http协议下，oracle连接池是工作正常的，与oracle服务端的连接能持续。 ¥100 萌新求问会的朋友跑通这两个数据集 ¥100 高通平台camx相机驱动 ¥66 添加内容使得出的非0变量个数最少（即xi尽可能为0）） ¥50 求援：连接云数据库出错 ¥50 找一种方法计算大曲曲心发酵温湿度 ```
``` ```
``` window.csdn.sideToolbar = { options: { afterFinished: function () { setTimeout(function () { var helphtml = '<a class="option-box" data-type="help" href="https://ask.csdn.net/questions/7441224" target="_blank">'+'<img src="https://g.csdnimg.cn/side-toolbar/2.5/images/bangzhucopy.png" alt="" srcset="">'+ '<span class="show-txt">帮助</span></a>'; \$('.csdn-side-toolbar > a:last').before(helphtml); }, 300); }, contentEl: document.getElementsByClassName('floor')[0] } } ```