blob: e700ec7d217ff9f8d363476024c9fb9957d3a894 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Crashpad: crashpad::CPUContextX86 Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="crashpad_doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Crashpad
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespacecrashpad.html">crashpad</a></li><li class="navelem"><a class="el" href="structcrashpad_1_1CPUContextX86.html">CPUContextX86</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="#pub-attribs">Public Attributes</a> &#124;
<a href="structcrashpad_1_1CPUContextX86-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">crashpad::CPUContextX86 Struct Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>A context structure carrying 32-bit x86 CPU state.
<a href="structcrashpad_1_1CPUContextX86.html#details">More...</a></p>
<p><code>#include &quot;snapshot/cpu_context.h&quot;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcrashpad_1_1CPUContextX86_1_1Fsave.html">Fsave</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcrashpad_1_1CPUContextX86_1_1Fxsave.html">Fxsave</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="unioncrashpad_1_1CPUContextX86_1_1X87OrMMXRegister.html">X87OrMMXRegister</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a1b86f3500e303d8d06ad611b709a8de3"><td class="memItemLeft" align="right" valign="top"><a id="a1b86f3500e303d8d06ad611b709a8de3"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>X87Register</b> = uint8_t[10]</td></tr>
<tr class="separator:a1b86f3500e303d8d06ad611b709a8de3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7fbd28260ed735f338ae970c99fa9ef5"><td class="memItemLeft" align="right" valign="top"><a id="a7fbd28260ed735f338ae970c99fa9ef5"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>XMMRegister</b> = uint8_t[16]</td></tr>
<tr class="separator:a7fbd28260ed735f338ae970c99fa9ef5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:ab90efe3c4cf0e10d820a12d7227383c0"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcrashpad_1_1CPUContextX86.html#ab90efe3c4cf0e10d820a12d7227383c0">FxsaveToFsave</a> (const <a class="el" href="structcrashpad_1_1CPUContextX86_1_1Fxsave.html">Fxsave</a> &amp;fxsave, <a class="el" href="structcrashpad_1_1CPUContextX86_1_1Fsave.html">Fsave</a> *fsave)</td></tr>
<tr class="memdesc:ab90efe3c4cf0e10d820a12d7227383c0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts an <code>fxsave</code> area to an <code>fsave</code> area. <a href="structcrashpad_1_1CPUContextX86.html#ab90efe3c4cf0e10d820a12d7227383c0">More...</a><br /></td></tr>
<tr class="separator:ab90efe3c4cf0e10d820a12d7227383c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8b6ecedc4f28b2e6b1564dc57489a8d9"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcrashpad_1_1CPUContextX86.html#a8b6ecedc4f28b2e6b1564dc57489a8d9">FsaveToFxsave</a> (const <a class="el" href="structcrashpad_1_1CPUContextX86_1_1Fsave.html">Fsave</a> &amp;fsave, <a class="el" href="structcrashpad_1_1CPUContextX86_1_1Fxsave.html">Fxsave</a> *fxsave)</td></tr>
<tr class="memdesc:a8b6ecedc4f28b2e6b1564dc57489a8d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts an <code>fsave</code> area to an <code>fxsave</code> area. <a href="structcrashpad_1_1CPUContextX86.html#a8b6ecedc4f28b2e6b1564dc57489a8d9">More...</a><br /></td></tr>
<tr class="separator:a8b6ecedc4f28b2e6b1564dc57489a8d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaa6da129178e00395358c4f288d5dc06"><td class="memItemLeft" align="right" valign="top">static uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcrashpad_1_1CPUContextX86.html#aaa6da129178e00395358c4f288d5dc06">FxsaveToFsaveTagWord</a> (uint16_t fsw, uint8_t fxsave_tag, const <a class="el" href="unioncrashpad_1_1CPUContextX86_1_1X87OrMMXRegister.html">X87OrMMXRegister</a> st_mm[8])</td></tr>
<tr class="memdesc:aaa6da129178e00395358c4f288d5dc06"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts x87 floating-point tag words from <code>fxsave</code> (abridged, 8-bit) to <code>fsave</code> (full, 16-bit) form. <a href="structcrashpad_1_1CPUContextX86.html#aaa6da129178e00395358c4f288d5dc06">More...</a><br /></td></tr>
<tr class="separator:aaa6da129178e00395358c4f288d5dc06"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a30c413e9272b7f2167c305a486e88dc0"><td class="memItemLeft" align="right" valign="top">static uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcrashpad_1_1CPUContextX86.html#a30c413e9272b7f2167c305a486e88dc0">FsaveToFxsaveTagWord</a> (uint16_t fsave_tag)</td></tr>
<tr class="memdesc:a30c413e9272b7f2167c305a486e88dc0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts x87 floating-point tag words from <code>fsave</code> (full, 16-bit) to <code>fxsave</code> (abridged, 8-bit) form. <a href="structcrashpad_1_1CPUContextX86.html#a30c413e9272b7f2167c305a486e88dc0">More...</a><br /></td></tr>
<tr class="separator:a30c413e9272b7f2167c305a486e88dc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Public Attributes</h2></td></tr>
<tr class="memitem:af1876d30ed4b46d1c3da751b381a9809"><td class="memItemLeft" align="right" valign="top"><a id="af1876d30ed4b46d1c3da751b381a9809"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>eax</b></td></tr>
<tr class="separator:af1876d30ed4b46d1c3da751b381a9809"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a90e4096b4212c09ccb16d5d514b7d4f7"><td class="memItemLeft" align="right" valign="top"><a id="a90e4096b4212c09ccb16d5d514b7d4f7"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>ebx</b></td></tr>
<tr class="separator:a90e4096b4212c09ccb16d5d514b7d4f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa43911bac13ef61a60f616708ea20ab0"><td class="memItemLeft" align="right" valign="top"><a id="aa43911bac13ef61a60f616708ea20ab0"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>ecx</b></td></tr>
<tr class="separator:aa43911bac13ef61a60f616708ea20ab0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a80fc20a1c67efa7eac25941ee99a2317"><td class="memItemLeft" align="right" valign="top"><a id="a80fc20a1c67efa7eac25941ee99a2317"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>edx</b></td></tr>
<tr class="separator:a80fc20a1c67efa7eac25941ee99a2317"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a86559f9edbf8dcbf18280f003ba0fb62"><td class="memItemLeft" align="right" valign="top"><a id="a86559f9edbf8dcbf18280f003ba0fb62"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>edi</b></td></tr>
<tr class="separator:a86559f9edbf8dcbf18280f003ba0fb62"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a75ab6394821251a9a3fdbaf231ea77f9"><td class="memItemLeft" align="right" valign="top"><a id="a75ab6394821251a9a3fdbaf231ea77f9"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>esi</b></td></tr>
<tr class="separator:a75ab6394821251a9a3fdbaf231ea77f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8f2ff349ac577e7894b58854e11792ca"><td class="memItemLeft" align="right" valign="top"><a id="a8f2ff349ac577e7894b58854e11792ca"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>ebp</b></td></tr>
<tr class="separator:a8f2ff349ac577e7894b58854e11792ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6959676f8b059bfdcb71f1191992cb04"><td class="memItemLeft" align="right" valign="top"><a id="a6959676f8b059bfdcb71f1191992cb04"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>esp</b></td></tr>
<tr class="separator:a6959676f8b059bfdcb71f1191992cb04"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0408af8f7e7a741cd63c68d1b997639"><td class="memItemLeft" align="right" valign="top"><a id="ab0408af8f7e7a741cd63c68d1b997639"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>eip</b></td></tr>
<tr class="separator:ab0408af8f7e7a741cd63c68d1b997639"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a446a7a69ec0957a1a0612671e632c786"><td class="memItemLeft" align="right" valign="top"><a id="a446a7a69ec0957a1a0612671e632c786"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>eflags</b></td></tr>
<tr class="separator:a446a7a69ec0957a1a0612671e632c786"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a53520606c959396cf6e89e0ad2d0eab3"><td class="memItemLeft" align="right" valign="top"><a id="a53520606c959396cf6e89e0ad2d0eab3"></a>
uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>cs</b></td></tr>
<tr class="separator:a53520606c959396cf6e89e0ad2d0eab3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad7a2c7e5f70443d38e65304e0fec9d86"><td class="memItemLeft" align="right" valign="top"><a id="ad7a2c7e5f70443d38e65304e0fec9d86"></a>
uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>ds</b></td></tr>
<tr class="separator:ad7a2c7e5f70443d38e65304e0fec9d86"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1f91fd9ab18a58e13d1d62bb85f3dc88"><td class="memItemLeft" align="right" valign="top"><a id="a1f91fd9ab18a58e13d1d62bb85f3dc88"></a>
uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>es</b></td></tr>
<tr class="separator:a1f91fd9ab18a58e13d1d62bb85f3dc88"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a20d5127b89e7dff29502d5250fb4a8a2"><td class="memItemLeft" align="right" valign="top"><a id="a20d5127b89e7dff29502d5250fb4a8a2"></a>
uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>fs</b></td></tr>
<tr class="separator:a20d5127b89e7dff29502d5250fb4a8a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac77f0c61de16a30b51214823f72cdaf2"><td class="memItemLeft" align="right" valign="top"><a id="ac77f0c61de16a30b51214823f72cdaf2"></a>
uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>gs</b></td></tr>
<tr class="separator:ac77f0c61de16a30b51214823f72cdaf2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaff8e374679288e022bef7ffe0ded2d5"><td class="memItemLeft" align="right" valign="top"><a id="aaff8e374679288e022bef7ffe0ded2d5"></a>
uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>ss</b></td></tr>
<tr class="separator:aaff8e374679288e022bef7ffe0ded2d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a915df1291a3ddb8ee7daccbfaece2c01"><td class="memItemLeft" align="right" valign="top"><a id="a915df1291a3ddb8ee7daccbfaece2c01"></a>
<a class="el" href="structcrashpad_1_1CPUContextX86_1_1Fxsave.html">Fxsave</a>&#160;</td><td class="memItemRight" valign="bottom"><b>fxsave</b></td></tr>
<tr class="separator:a915df1291a3ddb8ee7daccbfaece2c01"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e826ef3eee39c733fcc40d3e0c873e0"><td class="memItemLeft" align="right" valign="top"><a id="a8e826ef3eee39c733fcc40d3e0c873e0"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>dr0</b></td></tr>
<tr class="separator:a8e826ef3eee39c733fcc40d3e0c873e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e1f953936c7027edc74005dd60cdab6"><td class="memItemLeft" align="right" valign="top"><a id="a8e1f953936c7027edc74005dd60cdab6"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>dr1</b></td></tr>
<tr class="separator:a8e1f953936c7027edc74005dd60cdab6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a76e5455c5017597a6b89a6262e69734d"><td class="memItemLeft" align="right" valign="top"><a id="a76e5455c5017597a6b89a6262e69734d"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>dr2</b></td></tr>
<tr class="separator:a76e5455c5017597a6b89a6262e69734d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7149920a1dbc459ed0e15fd09509027e"><td class="memItemLeft" align="right" valign="top"><a id="a7149920a1dbc459ed0e15fd09509027e"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>dr3</b></td></tr>
<tr class="separator:a7149920a1dbc459ed0e15fd09509027e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adcf1ba86b334f3ab529363e5a44fe776"><td class="memItemLeft" align="right" valign="top"><a id="adcf1ba86b334f3ab529363e5a44fe776"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>dr4</b></td></tr>
<tr class="separator:adcf1ba86b334f3ab529363e5a44fe776"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0fa3979cbadfa9adfe012e8c030ff609"><td class="memItemLeft" align="right" valign="top"><a id="a0fa3979cbadfa9adfe012e8c030ff609"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>dr5</b></td></tr>
<tr class="separator:a0fa3979cbadfa9adfe012e8c030ff609"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a455365ee9641826c95708c1cde906ac3"><td class="memItemLeft" align="right" valign="top"><a id="a455365ee9641826c95708c1cde906ac3"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>dr6</b></td></tr>
<tr class="separator:a455365ee9641826c95708c1cde906ac3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a01c285e56fc7421b8852f9df9f63af69"><td class="memItemLeft" align="right" valign="top"><a id="a01c285e56fc7421b8852f9df9f63af69"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>dr7</b></td></tr>
<tr class="separator:a01c285e56fc7421b8852f9df9f63af69"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>A context structure carrying 32-bit x86 CPU state. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a8b6ecedc4f28b2e6b1564dc57489a8d9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8b6ecedc4f28b2e6b1564dc57489a8d9">&#9670;&nbsp;</a></span>FsaveToFxsave()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void crashpad::CPUContextX86::FsaveToFxsave </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structcrashpad_1_1CPUContextX86_1_1Fsave.html">Fsave</a> &amp;&#160;</td>
<td class="paramname"><em>fsave</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structcrashpad_1_1CPUContextX86_1_1Fxsave.html">Fxsave</a> *&#160;</td>
<td class="paramname"><em>fxsave</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Converts an <code>fsave</code> area to an <code>fxsave</code> area. </p>
<p><code>fsave</code> state is restricted to the x87 FPU, while <code>fxsave</code> state includes state related to the x87 FPU as well as state specific to SSE.</p>
<p>As the <code>fsave</code> format is a subset of the <code>fxsave</code> format, this operation cannot fully populate the <code>fxsave</code> area. Fields in <em>fxsave</em> that have no equivalent in <em>fsave</em> are set to <code>0</code>, including Fxsave::mxcsr, Fxsave::mxcsr_mask, Fxsave::xmm, and Fxsave::available. <a class="el" href="structcrashpad_1_1CPUContextX86.html#a30c413e9272b7f2167c305a486e88dc0" title="Converts x87 floating-point tag words from fsave (full, 16-bit) to fxsave (abridged,...">FsaveToFxsaveTagWord()</a> is used to derive Fxsave::ftw from the full 16-bit form used by <code>fsave</code>. Reserved fields in <em>fxsave</em> are set to <code>0</code>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">fsave</td><td>The <code>fsave</code> area to convert. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">fxsave</td><td>The <code>fxsave</code> area to populate.</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="structcrashpad_1_1CPUContextX86.html#ab90efe3c4cf0e10d820a12d7227383c0" title="Converts an fxsave area to an fsave area.">FxsaveToFsave()</a> </dd></dl>
</div>
</div>
<a id="a30c413e9272b7f2167c305a486e88dc0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a30c413e9272b7f2167c305a486e88dc0">&#9670;&nbsp;</a></span>FsaveToFxsaveTagWord()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">uint8_t crashpad::CPUContextX86::FsaveToFxsaveTagWord </td>
<td>(</td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>fsave_tag</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Converts x87 floating-point tag words from <code>fsave</code> (full, 16-bit) to <code>fxsave</code> (abridged, 8-bit) form. </p>
<p>This function performs the inverse operation of <a class="el" href="structcrashpad_1_1CPUContextX86.html#aaa6da129178e00395358c4f288d5dc06" title="Converts x87 floating-point tag words from fxsave (abridged, 8-bit) to fsave (full,...">FxsaveToFsaveTagWord()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">fsave_tag</td><td>The full FPU tag word.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The abridged FPU tag word. </dd></dl>
</div>
</div>
<a id="ab90efe3c4cf0e10d820a12d7227383c0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab90efe3c4cf0e10d820a12d7227383c0">&#9670;&nbsp;</a></span>FxsaveToFsave()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void crashpad::CPUContextX86::FxsaveToFsave </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structcrashpad_1_1CPUContextX86_1_1Fxsave.html">Fxsave</a> &amp;&#160;</td>
<td class="paramname"><em>fxsave</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structcrashpad_1_1CPUContextX86_1_1Fsave.html">Fsave</a> *&#160;</td>
<td class="paramname"><em>fsave</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Converts an <code>fxsave</code> area to an <code>fsave</code> area. </p>
<p><code>fsave</code> state is restricted to the x87 FPU, while <code>fxsave</code> state includes state related to the x87 FPU as well as state specific to SSE.</p>
<p>As the <code>fxsave</code> format is a superset of the <code>fsave</code> format, this operation fully populates the <code>fsave</code> area. <code>fsave</code> uses the full 16-bit form for the x87 floating-point tag word, so <a class="el" href="structcrashpad_1_1CPUContextX86.html#aaa6da129178e00395358c4f288d5dc06" title="Converts x87 floating-point tag words from fxsave (abridged, 8-bit) to fsave (full,...">FxsaveToFsaveTagWord()</a> is used to derive Fsave::ftw from the abridged 8-bit form used by <code>fxsave</code>. Reserved fields in <em>fsave</em> are set to <code>0</code>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">fxsave</td><td>The <code>fxsave</code> area to convert. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">fsave</td><td>The <code>fsave</code> area to populate.</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="structcrashpad_1_1CPUContextX86.html#a8b6ecedc4f28b2e6b1564dc57489a8d9" title="Converts an fsave area to an fxsave area.">FsaveToFxsave()</a> </dd></dl>
</div>
</div>
<a id="aaa6da129178e00395358c4f288d5dc06"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaa6da129178e00395358c4f288d5dc06">&#9670;&nbsp;</a></span>FxsaveToFsaveTagWord()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">uint16_t crashpad::CPUContextX86::FxsaveToFsaveTagWord </td>
<td>(</td>
<td class="paramtype">uint16_t&#160;</td>
<td class="paramname"><em>fsw</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t&#160;</td>
<td class="paramname"><em>fxsave_tag</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="unioncrashpad_1_1CPUContextX86_1_1X87OrMMXRegister.html">X87OrMMXRegister</a>&#160;</td>
<td class="paramname"><em>st_mm</em>[8]&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Converts x87 floating-point tag words from <code>fxsave</code> (abridged, 8-bit) to <code>fsave</code> (full, 16-bit) form. </p>
<p><code>fxsave</code> stores the x87 floating-point tag word in abridged 8-bit form, and <code>fsave</code> stores it in full 16-bit form. Some users, notably CPUContextX86::Fsave::ftw, require the full 16-bit form, where most other contemporary code uses <code>fxsave</code> and thus the abridged 8-bit form found in CPUContextX86::Fxsave::ftw.</p>
<p>This function converts an abridged tag word to the full version by using the abridged tag word and the contents of the registers it describes. See Intel Software Developer’s Manual, Volume 2A: Instruction Set Reference A-M (253666-052), 3.2 “FXSAVE”, specifically, the notes on the abridged FTW and recreating the FSAVE format, and AMD Architecture Programmer’s Manual, Volume 2: System Programming (24593-3.24), “FXSAVE Format for x87 Tag Word”.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="structcrashpad_1_1CPUContextX86.html#a30c413e9272b7f2167c305a486e88dc0" title="Converts x87 floating-point tag words from fsave (full, 16-bit) to fxsave (abridged,...">FsaveToFxsaveTagWord()</a></dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">fsw</td><td>The FPU status word, used to map logical <em>st_mm</em> registers to their physical counterparts. This can be taken from CPUContextX86::Fxsave::fsw. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">fxsave_tag</td><td>The abridged FPU tag word. This can be taken from CPUContextX86::Fxsave::ftw. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">st_mm</td><td>The floating-point registers in logical order. This can be taken from CPUContextX86::Fxsave::st_mm.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The full FPU tag word. </dd></dl>
</div>
</div>
<hr/>The documentation for this struct was generated from the following files:<ul>
<li>snapshot/cpu_context.h</li>
<li>snapshot/cpu_context.cc</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.18
</small></address>
</body>
</html>