Changeset 86277 in vbox for trunk/src/libs
- Timestamp:
- Sep 24, 2020 8:13:22 PM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 140553
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/libs/xpcom18a4/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_amd64_vbox.asm
r86272 r86277 101 101 ; case goes to generic (slow) code path. 102 102 ; 103 cmp r12d, 1 104 je .fast_1 105 cmp r12d, 2 106 je .fast_2 107 cmp r12d, 3 108 je .fast_3 109 cmp r12d, 4 110 je .fast_4 111 cmp r12d, 0 112 je .fast_0 113 cmp r12d, 5 114 je .fast_5 115 jmp .slow 116 times 0x17 int3 ; manually align the 'ret' instruction on the last cacheline byte and fast_1 on the first. 103 dec edx ; we can still use edx for the parameter count here as a throwaway. 104 jz .fast_1 105 dec edx 106 jz .fast_2 107 dec edx 108 jz .fast_3 109 dec edx 110 jz .fast_4 111 dec edx 112 jnz .slow_or_zero 117 113 %macro fast_case 4 118 114 %1: 119 test byte [rbx + nsXPTCVariant_size * %3 + nsXPTCVariant.flags], PTR_IS_DATA 115 mov eax, [rbx + nsXPTCVariant_size * %3 + nsXPTCVariant.type] ; ASSUMES 'type' and 'flags' are adjacent byte fields. 116 test ah, PTR_IS_DATA 120 117 mov %4, [rbx + nsXPTCVariant_size * %3 + nsXPTCVariant.ptr] 121 118 jnz %2 119 sub al, T_FLOAT 120 sub al, 2 121 je .fast_bailout 122 122 mov %4, [rbx + nsXPTCVariant_size * %3 + nsXPTCVariant.val] 123 cmp byte [rbx + nsXPTCVariant_size * %3 + nsXPTCVariant.flags], T_FLOAT124 je .fast_bailout125 cmp byte [rbx + nsXPTCVariant_size * %3 + nsXPTCVariant.flags], T_DOUBLE126 je .fast_bailout127 123 %endmacro 128 124 fast_case .fast_5, .fast_4, 4, r9 … … 145 141 ret 146 142 143 .slow_or_zero: 144 cmp r12d, 0 145 je .fast_0 146 %if 0 147 jmp .slow 147 148 .fast_bailout: 148 ; int3 149 int3 150 %else 151 .fast_bailout: 152 %endif 149 153 .slow: 150 154 %endif
Note:
See TracChangeset
for help on using the changeset viewer.