# Golang decompilation ignoring fact xmm15 is always 0?

**URL:** <https://community.hex-rays.com/t/golang-decompilation-ignoring-fact-xmm15-is-always-0/346>\
**Category:** Support\
**Created:** [June 4, 2025, 4:46am UTC](https://community.hex-rays.com/t/golang-decompilation-ignoring-fact-xmm15-is-always-0/346 "2025-06-04T04:46:00Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![gssincla](https://avatars.discourse-cdn.com/v4/letter/g/c67d28/32.png) [@gssincla](https://community.hex-rays.com/u/gssincla)\
**Post date:** [June 4, 2025, 4:46am UTC](https://community.hex-rays.com/t/golang-decompilation-ignoring-fact-xmm15-is-always-0/346/1 "2025-06-04T04:46:00Z")

</div>

When analzying Go based samples I’ve noticed that Hex-Rays doesn’t pay attention to the fact that xmm15 is always 0 according to the ABI (see here [Go internal ABI specification](https://go.googlesource.com/go/+/refs/heads/dev.regabi/src/cmd/compile/internal-abi.md)) . For example, if you have this code:

> movq [rsp+0E8h+var\_10], xmm15  
> mov qword ptr [rsp+0E8h+a2], rbx  
> mov [rsp+0E8h+var\_99], 0  
> movups [rsp+0E8h+var\_88], xmm15  
> movups [rsp+0E8h+var\_68], xmm15

then the decompiler will produce this output:

> \_\_int128 v2; // xmm15
> 
> v23 = (void (\*\*)(void))v2;  
> v14 = v2;

If xmm15 = 15, then shouldn’t the output be:

> v23 = 0;  
> v14 = 0;

Is there a way to force the decompiler to recognize this? It would clear up some of the _VALUE MAY BE UNDEFINED;_ entries in the decompilation.

---

<div class="post-metadata">

**Author:** ![igor](https://sea2.discourse-cdn.com/flex002/user_avatar/community.hex-rays.com/igor/32/35_2.png) [@igor](https://community.hex-rays.com/u/igor)\
**Post date:** [June 4, 2025, 12:10pm UTC](https://community.hex-rays.com/t/golang-decompilation-ignoring-fact-xmm15-is-always-0/346/2 "2025-06-04T12:10:09Z")

</div>

In IDA 9.2, the decompiler will know about xmm15 (and other platform-specific zero registers).

---

<div class="post-metadata">

**Author:** ![gssincla](https://avatars.discourse-cdn.com/v4/letter/g/c67d28/32.png) [@gssincla](https://community.hex-rays.com/u/gssincla)\
**Post date:** [June 4, 2025, 1:50pm UTC](https://community.hex-rays.com/t/golang-decompilation-ignoring-fact-xmm15-is-always-0/346/3 "2025-06-04T13:50:37Z")

</div>

is there anyway to make it know with the current version? 🙂

---

<div class="post-metadata">

**Author:** ![igor](https://sea2.discourse-cdn.com/flex002/user_avatar/community.hex-rays.com/igor/32/35_2.png) [@igor](https://community.hex-rays.com/u/igor)\
**Post date:** [June 4, 2025, 3:24pm UTC](https://community.hex-rays.com/t/golang-decompilation-ignoring-fact-xmm15-is-always-0/346/4 "2025-06-04T15:24:31Z")

</div>

Hm, I guess for now you could make a decompiler plugin which inserts artificial `mov #0, xmm15` microinstructions at the start of the functions.
