- Timestamp:
- Oct 8, 2019 12:40:30 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/doc/VBox-CodingGuidelines.cpp
r80569 r81149 268 268 * 269 269 * </ul> 270 * 271 * @subsubsection sec_vbox_guideline_compulsory_sub64_comp Comparing the GCC and MSC calling conventions 272 * 273 * GCC expects the following (cut & past from page 20 in the ABI draft 0.96): 274 * 275 * @verbatim 276 %rax temporary register; with variable arguments passes information about the 277 number of SSE registers used; 1st return register. 278 [Not preserved] 279 %rbx callee-saved register; optionally used as base pointer. 280 [Preserved] 281 %rcx used to pass 4th integer argument to functions. 282 [Not preserved] 283 %rdx used to pass 3rd argument to functions; 2nd return register 284 [Not preserved] 285 %rsp stack pointer 286 [Preserved] 287 %rbp callee-saved register; optionally used as frame pointer 288 [Preserved] 289 %rsi used to pass 2nd argument to functions 290 [Not preserved] 291 %rdi used to pass 1st argument to functions 292 [Not preserved] 293 %r8 used to pass 5th argument to functions 294 [Not preserved] 295 %r9 used to pass 6th argument to functions 296 [Not preserved] 297 %r10 temporary register, used for passing a function's static chain 298 pointer [Not preserved] 299 %r11 temporary register 300 [Not preserved] 301 %r12-r15 callee-saved registers 302 [Preserved] 303 %xmm0-%xmm1 used to pass and return floating point arguments 304 [Not preserved] 305 %xmm2-%xmm7 used to pass floating point arguments 306 [Not preserved] 307 %xmm8-%xmm15 temporary registers 308 [Not preserved] 309 %mmx0-%mmx7 temporary registers 310 [Not preserved] 311 %st0 temporary register; used to return long double arguments 312 [Not preserved] 313 %st1 temporary registers; used to return long double arguments 314 [Not preserved] 315 %st2-%st7 temporary registers 316 [Not preserved] 317 %fs Reserved for system use (as thread specific data register) 318 [Not preserved] 319 @endverbatim 320 * 321 * Direction flag is preserved as cleared. 322 * The stack must be aligned on a 16-byte boundary before the 'call/jmp' instruction. 323 * 324 * MSC expects the following: 325 * @verbatim 326 rax return value, not preserved. 327 rbx preserved. 328 rcx 1st argument, integer, not preserved. 329 rdx 2nd argument, integer, not preserved. 330 rbp preserved. 331 rsp preserved. 332 rsi preserved. 333 rdi preserved. 334 r8 3rd argument, integer, not preserved. 335 r9 4th argument, integer, not preserved. 336 r10 scratch register, not preserved. 337 r11 scratch register, not preserved. 338 r12-r15 preserved. 339 xmm0 1st argument, fp, return value, not preserved. 340 xmm1 2st argument, fp, not preserved. 341 xmm2 3st argument, fp, not preserved. 342 xmm3 4st argument, fp, not preserved. 343 xmm4-xmm5 scratch, not preserved. 344 xmm6-xmm15 preserved. 345 @endverbatim 346 * 347 * Dunno what the direction flag is... 348 * The stack must be aligned on a 16-byte boundary before the 'call/jmp' instruction. 349 * 270 350 * 271 351 * @subsection sec_vbox_guideline_compulsory_cppmain C++ guidelines for Main
Note:
See TracChangeset
for help on using the changeset viewer.