]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/context/src/asm/ontop_i386_sysv_elf_gas.S
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / context / src / asm / ontop_i386_sysv_elf_gas.S
index 64f2b5ec29c0c40f509eb9061d5dcc1a4b201e59..816657a0307982838769fd93e382664ddf05e347 100644 (file)
@@ -5,53 +5,81 @@
           http://www.boost.org/LICENSE_1_0.txt)
 */
 
-/*****************************************************************************************
- *                                                                                       *
- *  -----------------------------------------------------------------------------------  *
- *  |    0    |    1    |    2    |    3    |    4     |    5    |    6     |    7    |  *
- *  -----------------------------------------------------------------------------------  *
- *  |   0x0   |   0x4   |   0x8   |   0xc   |   0x10   |   0x14  |   0x18   |   0x1c  |  *
- *  -----------------------------------------------------------------------------------  *
- *  |   EDI   |   ESI   |   EBX   |   EBP   |   EIP    |  hidden |    to    |   data  |  *
- *  -----------------------------------------------------------------------------------  *
- *                                                                                       *
- *****************************************************************************************/
+/****************************************************************************************
+ *                                                                                      *
+ *  ----------------------------------------------------------------------------------  *
+ *  |    0    |    1    |    2    |    3    |    4     |    5    |    6    |    7    |  *
+ *  ----------------------------------------------------------------------------------  *
+ *  |   0x0   |   0x4   |   0x8   |   0xc   |   0x10   |   0x14  |   0x18  |   0x1c  |  *
+ *  ----------------------------------------------------------------------------------  *
+ *  | fc_mxcsr|fc_x87_cw|   EDI   |   ESI   |   EBX    |   EBP   |   EIP   |  hidden |  *
+ *  ----------------------------------------------------------------------------------  *
+ *  ----------------------------------------------------------------------------------  *
+ *  |    8    |    9    |    10   |    11   |    12    |    13   |    14   |    15   |  *
+ *  ----------------------------------------------------------------------------------  *
+ *  |   0x20  |   0x24  |                                                            |  *
+ *  ----------------------------------------------------------------------------------  *
+ *  |    to   |   data  |                                                            |  *
+ *  ----------------------------------------------------------------------------------  *
+ *                                                                                      *
+ ****************************************************************************************/
 
 .text
 .globl ontop_fcontext
 .align 2
 .type ontop_fcontext,@function
 ontop_fcontext:
-    pushl  %ebp  /* save EBP */
-    pushl  %ebx  /* save EBX */
-    pushl  %esi  /* save ESI */
-    pushl  %edi  /* save EDI */
+    leal  -0x18(%esp), %esp  /* prepare stack */
 
-    /* store fcontext_t in ECX */
+#if !defined(BOOST_USE_TSX)
+    stmxcsr  (%esp)     /* save MMX control- and status-word */
+    fnstcw   0x4(%esp)  /* save x87 control-word */
+#endif
+
+    movl  %edi, 0x8(%esp)  /* save EDI */
+    movl  %esi, 0xc(%esp)  /* save ESI */
+    movl  %ebx, 0x10(%esp)  /* save EBX */
+    movl  %ebp, 0x14(%esp)  /* save EBP */
+
+    /* store ESP (pointing to context-data) in ECX */
     movl  %esp, %ecx
 
     /* first arg of ontop_fcontext() == fcontext to jump to */
-    movl  0x18(%esp), %eax
+    movl  0x20(%esp), %eax
 
     /* pass parent fcontext_t */
-    movl  %ecx, 0x18(%eax)
+    movl  %ecx, 0x20(%eax)
 
     /* second arg of ontop_fcontext() == data to be transferred */
-    movl  0x1c(%esp), %ecx
+    movl  0x24(%esp), %ecx
 
     /* pass data */
-    movl %ecx, 0x1c(%eax)
+    movl %ecx, 0x24(%eax)
 
     /* third arg of ontop_fcontext() == ontop-function */
-    movl  0x20(%esp), %ecx
+    movl  0x28(%esp), %ecx
 
-    /* restore ESP (pointing to context-data) from EDX */
+    /* restore ESP (pointing to context-data) from EAX */
     movl  %eax, %esp
 
-    popl  %edi  /* restore EDI */
-    popl  %esi  /* restore ESI */
-    popl  %ebx  /* restore EBX */
-    popl  %ebp  /* restore EBP */
+    /* address of returned transport_t */
+    movl 0x1c(%esp), %eax
+    /* return parent fcontext_t */
+    movl  %ecx, (%eax)
+    /* return data */
+    movl %edx, 0x4(%eax)
+
+#if !defined(BOOST_USE_TSX)
+    ldmxcsr  (%esp)     /* restore MMX control- and status-word */
+    fldcw    0x4(%esp)  /* restore x87 control-word */
+#endif
+
+    movl  0x8(%esp), %edi  /* restore EDI */
+    movl  0xc(%esp), %esi  /* restore ESI */
+    movl  0x10(%esp), %ebx  /* restore EBX */
+    movl  0x14(%esp), %ebp  /* restore EBP */
+
+    leal  0x18(%esp), %esp  /* prepare stack */
 
     /* jump to context */
     jmp *%ecx