/*
* Copyright (c) 2016, 2021, Intel Corporation. All rights reserved.
* Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.
* Intel Math Library (LIBM) Source Code
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
#include "precompiled.hpp"
#include "asm/assembler.hpp"
#include "asm/assembler.inline.hpp"
#include "macroAssembler_x86.hpp"
#include "utilities/globalDefinitions.hpp"
/******************************************************************************/
// ALGORITHM DESCRIPTION - LOG()
// ---------------------
//
// x=2^k * mx, mx in [1,2)
//
// Get B~1/mx based on the output of rcpss instruction (B0)
// B = int((B0*2^7+0.5))/2^7
//
// Reduced argument: r=B*mx-1.0 (computed accurately in high and low parts)
//
// Result: k*log(2) - log(B) + p(r) if |x-1| >= small value (2^-6) and
// p(r) is a degree 7 polynomial
// -log(B) read from data table (high, low parts)
// Result is formed from high and low parts
//
// Special cases:
// log(NaN) = quiet NaN, and raise invalid exception
// log(+INF) = that INF
// log(0) = -INF with divide-by-zero exception raised
// log(1) = +0
// log(x) = NaN with invalid exception raised if x < -0, including -INF
//
/******************************************************************************/
// The 32 bit code is at most SSE2 compliant
//
ATTRIBUTE_ALIGNED(16 ) juint _static_const_table_log[] =
{
0 xfefa3800UL, 0 x3fe62e42UL, 0 x93c76730UL, 0 x3d2ef357UL, 0 xaa241800UL,
0 x3fe5ee82UL, 0 x0cda46beUL, 0 x3d220238UL, 0 x5c364800UL, 0 x3fe5af40UL,
0 xac10c9fbUL, 0 x3d2dfa63UL, 0 x26bb8c00UL, 0 x3fe5707aUL, 0 xff3303ddUL,
0 x3d09980bUL, 0 x26867800UL, 0 x3fe5322eUL, 0 x5d257531UL, 0 x3d05ccc4UL,
0 x835a5000UL, 0 x3fe4f45aUL, 0 x6d93b8fbUL, 0 xbd2e6c51UL, 0 x6f970c00UL,
0 x3fe4b6fdUL, 0 xed4c541cUL, 0 x3cef7115UL, 0 x27e8a400UL, 0 x3fe47a15UL,
0 xf94d60aaUL, 0 xbd22cb6aUL, 0 xf2f92400UL, 0 x3fe43d9fUL, 0 x481051f7UL,
0 xbcfd984fUL, 0 x2125cc00UL, 0 x3fe4019cUL, 0 x30f0c74cUL, 0 xbd26ce79UL,
0 x0c36c000UL, 0 x3fe3c608UL, 0 x7cfe13c2UL, 0 xbd02b736UL, 0 x17197800UL,
0 x3fe38ae2UL, 0 xbb5569a4UL, 0 xbd218b7aUL, 0 xad9d8c00UL, 0 x3fe35028UL,
0 x9527e6acUL, 0 x3d10b83fUL, 0 x44340800UL, 0 x3fe315daUL, 0 xc5a0ed9cUL,
0 xbd274e93UL, 0 x57b0e000UL, 0 x3fe2dbf5UL, 0 x07b9dc11UL, 0 xbd17a6e5UL,
0 x6d0ec000UL, 0 x3fe2a278UL, 0 xe797882dUL, 0 x3d206d2bUL, 0 x1134dc00UL,
0 x3fe26962UL, 0 x05226250UL, 0 xbd0b61f1UL, 0 xd8bebc00UL, 0 x3fe230b0UL,
0 x6e48667bUL, 0 x3d12fc06UL, 0 x5fc61800UL, 0 x3fe1f863UL, 0 xc9fe81d3UL,
0 xbd2a7242UL, 0 x49ae6000UL, 0 x3fe1c078UL, 0 xed70e667UL, 0 x3cccacdeUL,
0 x40f23c00UL, 0 x3fe188eeUL, 0 xf8ab4650UL, 0 x3d14cc4eUL, 0 xf6f29800UL,
0 x3fe151c3UL, 0 xa293ae49UL, 0 xbd2edd97UL, 0 x23c75c00UL, 0 x3fe11af8UL,
0 xbb9ddcb2UL, 0 xbd258647UL, 0 x8611cc00UL, 0 x3fe0e489UL, 0 x07801742UL,
0 x3d1c2998UL, 0 xe2d05400UL, 0 x3fe0ae76UL, 0 x887e7e27UL, 0 x3d1f486bUL,
0 x0533c400UL, 0 x3fe078bfUL, 0 x41edf5fdUL, 0 x3d268122UL, 0 xbe760400UL,
0 x3fe04360UL, 0 xe79539e0UL, 0 xbd04c45fUL, 0 xe5b20800UL, 0 x3fe00e5aUL,
0 xb1727b1cUL, 0 xbd053ba3UL, 0 xaf7a4800UL, 0 x3fdfb358UL, 0 x3c164935UL,
0 x3d0085faUL, 0 xee031800UL, 0 x3fdf4aa7UL, 0 x6f014a8bUL, 0 x3d12cde5UL,
0 x56b41000UL, 0 x3fdee2a1UL, 0 x5a470251UL, 0 x3d2f27f4UL, 0 xc3ddb000UL,
0 x3fde7b42UL, 0 x5372bd08UL, 0 xbd246550UL, 0 x1a272800UL, 0 x3fde148aUL,
0 x07322938UL, 0 xbd1326b2UL, 0 x484c9800UL, 0 x3fddae75UL, 0 x60dc616aUL,
0 xbd1ea42dUL, 0 x46def800UL, 0 x3fdd4902UL, 0 xe9a767a8UL, 0 x3d235bafUL,
0 x18064800UL, 0 x3fdce42fUL, 0 x3ec7a6b0UL, 0 xbd0797c3UL, 0 xc7455800UL,
0 x3fdc7ff9UL, 0 xc15249aeUL, 0 xbd29b6ddUL, 0 x693fa000UL, 0 x3fdc1c60UL,
0 x7fe8e180UL, 0 x3d2cec80UL, 0 x1b80e000UL, 0 x3fdbb961UL, 0 xf40a666dUL,
0 x3d27d85bUL, 0 x04462800UL, 0 x3fdb56faUL, 0 x2d841995UL, 0 x3d109525UL,
0 x5248d000UL, 0 x3fdaf529UL, 0 x52774458UL, 0 xbd217cc5UL, 0 x3c8ad800UL,
0 x3fda93edUL, 0 xbea77a5dUL, 0 x3d1e36f2UL, 0 x0224f800UL, 0 x3fda3344UL,
0 x7f9d79f5UL, 0 x3d23c645UL, 0 xea15f000UL, 0 x3fd9d32bUL, 0 x10d0c0b0UL,
0 xbd26279eUL, 0 x43135800UL, 0 x3fd973a3UL, 0 xa502d9f0UL, 0 xbd152313UL,
0 x635bf800UL, 0 x3fd914a8UL, 0 x2ee6307dUL, 0 xbd1766b5UL, 0 xa88b3000UL,
0 x3fd8b639UL, 0 xe5e70470UL, 0 xbd205ae1UL, 0 x776dc800UL, 0 x3fd85855UL,
0 x3333778aUL, 0 x3d2fd56fUL, 0 x3bd81800UL, 0 x3fd7fafaUL, 0 xc812566aUL,
0 xbd272090UL, 0 x687cf800UL, 0 x3fd79e26UL, 0 x2efd1778UL, 0 x3d29ec7dUL,
0 x76c67800UL, 0 x3fd741d8UL, 0 x49dc60b3UL, 0 x3d2d8b09UL, 0 xe6af1800UL,
0 x3fd6e60eUL, 0 x7c222d87UL, 0 x3d172165UL, 0 x3e9c6800UL, 0 x3fd68ac8UL,
0 x2756eba0UL, 0 x3d20a0d3UL, 0 x0b3ab000UL, 0 x3fd63003UL, 0 xe731ae00UL,
0 xbd2db623UL, 0 xdf596000UL, 0 x3fd5d5bdUL, 0 x08a465dcUL, 0 xbd0a0b2aUL,
0 x53c8d000UL, 0 x3fd57bf7UL, 0 xee5d40efUL, 0 x3d1fadedUL, 0 x0738a000UL,
0 x3fd522aeUL, 0 x8164c759UL, 0 x3d2ebe70UL, 0 x9e173000UL, 0 x3fd4c9e0UL,
0 x1b0ad8a4UL, 0 xbd2e2089UL, 0 xc271c800UL, 0 x3fd4718dUL, 0 x0967d675UL,
0 xbd2f27ceUL, 0 x23d5e800UL, 0 x3fd419b4UL, 0 xec90e09dUL, 0 x3d08e436UL,
0 x77333000UL, 0 x3fd3c252UL, 0 xb606bd5cUL, 0 x3d183b54UL, 0 x76be1000UL,
0 x3fd36b67UL, 0 xb0f177c8UL, 0 x3d116ecdUL, 0 xe1d36000UL, 0 x3fd314f1UL,
0 xd3213cb8UL, 0 xbd28e27aUL, 0 x7cdc9000UL, 0 x3fd2bef0UL, 0 x4a5004f4UL,
0 x3d2a9cfaUL, 0 x1134d800UL, 0 x3fd26962UL, 0 xdf5bb3b6UL, 0 x3d2c93c1UL,
0 x6d0eb800UL, 0 x3fd21445UL, 0 xba46baeaUL, 0 x3d0a87deUL, 0 x635a6800UL,
0 x3fd1bf99UL, 0 x5147bdb7UL, 0 x3d2ca6edUL, 0 xcbacf800UL, 0 x3fd16b5cUL,
0 xf7a51681UL, 0 x3d2b9acdUL, 0 x8227e800UL, 0 x3fd1178eUL, 0 x63a5f01cUL,
0 xbd2c210eUL, 0 x67616000UL, 0 x3fd0c42dUL, 0 x163ceae9UL, 0 x3d27188bUL,
0 x604d5800UL, 0 x3fd07138UL, 0 x16ed4e91UL, 0 x3cf89cdbUL, 0 x5626c800UL,
0 x3fd01eaeUL, 0 x1485e94aUL, 0 xbd16f08cUL, 0 x6cb3b000UL, 0 x3fcf991cUL,
0 xca0cdf30UL, 0 x3d1bcbecUL, 0 xe4dd0000UL, 0 x3fcef5adUL, 0 x65bb8e11UL,
0 xbcca2115UL, 0 xffe71000UL, 0 x3fce530eUL, 0 x6041f430UL, 0 x3cc21227UL,
0 xb0d49000UL, 0 x3fcdb13dUL, 0 xf715b035UL, 0 xbd2aff2aUL, 0 xf2656000UL,
0 x3fcd1037UL, 0 x75b6f6e4UL, 0 xbd084a7eUL, 0 xc6f01000UL, 0 x3fcc6ffbUL,
0 xc5962bd2UL, 0 xbcf1ec72UL, 0 x383be000UL, 0 x3fcbd087UL, 0 x595412b6UL,
0 xbd2d4bc4UL, 0 x575bd000UL, 0 x3fcb31d8UL, 0 x4eace1aaUL, 0 xbd0c358dUL,
0 x3c8ae000UL, 0 x3fca93edUL, 0 x50562169UL, 0 xbd287243UL, 0 x07089000UL,
0 x3fc9f6c4UL, 0 x6865817aUL, 0 x3d29904dUL, 0 xdcf70000UL, 0 x3fc95a5aUL,
0 x58a0ff6fUL, 0 x3d07f228UL, 0 xeb390000UL, 0 x3fc8beafUL, 0 xaae92cd1UL,
0 xbd073d54UL, 0 x6551a000UL, 0 x3fc823c1UL, 0 x9a631e83UL, 0 x3d1e0ddbUL,
0 x85445000UL, 0 x3fc7898dUL, 0 x70914305UL, 0 xbd1c6610UL, 0 x8b757000UL,
0 x3fc6f012UL, 0 xe59c21e1UL, 0 xbd25118dUL, 0 xbe8c1000UL, 0 x3fc6574eUL,
0 x2c3c2e78UL, 0 x3d19cf8bUL, 0 x6b544000UL, 0 x3fc5bf40UL, 0 xeb68981cUL,
0 xbd127023UL, 0 xe4a1b000UL, 0 x3fc527e5UL, 0 xe5697dc7UL, 0 x3d2633e8UL,
0 x8333b000UL, 0 x3fc4913dUL, 0 x54fdb678UL, 0 x3d258379UL, 0 xa5993000UL,
0 x3fc3fb45UL, 0 x7e6a354dUL, 0 xbd2cd1d8UL, 0 xb0159000UL, 0 x3fc365fcUL,
0 x234b7289UL, 0 x3cc62fa8UL, 0 x0c868000UL, 0 x3fc2d161UL, 0 xcb81b4a1UL,
0 x3d039d6cUL, 0 x2a49c000UL, 0 x3fc23d71UL, 0 x8fd3df5cUL, 0 x3d100d23UL,
0 x7e23f000UL, 0 x3fc1aa2bUL, 0 x44389934UL, 0 x3d2ca78eUL, 0 x8227e000UL,
0 x3fc1178eUL, 0 xce2d07f2UL, 0 x3d21ef78UL, 0 xb59e4000UL, 0 x3fc08598UL,
0 x7009902cUL, 0 xbd27e5ddUL, 0 x39dbe000UL, 0 x3fbfe891UL, 0 x4fa10afdUL,
0 xbd2534d6UL, 0 x830a2000UL, 0 x3fbec739UL, 0 xafe645e0UL, 0 xbd2dc068UL,
0 x63844000UL, 0 x3fbda727UL, 0 x1fa71733UL, 0 x3d1a8940UL, 0 x01bc4000UL,
0 x3fbc8858UL, 0 xc65aacd3UL, 0 x3d2646d1UL, 0 x8dad6000UL, 0 x3fbb6ac8UL,
0 x2bf768e5UL, 0 xbd139080UL, 0 x40b1c000UL, 0 x3fba4e76UL, 0 xb94407c8UL,
0 xbd0e42b6UL, 0 x5d594000UL, 0 x3fb9335eUL, 0 x3abd47daUL, 0 x3d23115cUL,
0 x2f40e000UL, 0 x3fb8197eUL, 0 xf96ffdf7UL, 0 x3d0f80dcUL, 0 x0aeac000UL,
0 x3fb700d3UL, 0 xa99ded32UL, 0 x3cec1e8dUL, 0 x4d97a000UL, 0 x3fb5e95aUL,
0 x3c5d1d1eUL, 0 xbd2c6906UL, 0 x5d208000UL, 0 x3fb4d311UL, 0 x82f4e1efUL,
0 xbcf53a25UL, 0 xa7d1e000UL, 0 x3fb3bdf5UL, 0 xa5db4ed7UL, 0 x3d2cc85eUL,
0 xa4472000UL, 0 x3fb2aa04UL, 0 xae9c697dUL, 0 xbd20b6e8UL, 0 xd1466000UL,
0 x3fb1973bUL, 0 x560d9e9bUL, 0 xbd25325dUL, 0 xb59e4000UL, 0 x3fb08598UL,
0 x7009902cUL, 0 xbd17e5ddUL, 0 xc006c000UL, 0 x3faeea31UL, 0 x4fc93b7bUL,
0 xbd0e113eUL, 0 xcdddc000UL, 0 x3faccb73UL, 0 x47d82807UL, 0 xbd1a68f2UL,
0 xd0fb0000UL, 0 x3faaaef2UL, 0 x353bb42eUL, 0 x3d20fc1aUL, 0 x149fc000UL,
0 x3fa894aaUL, 0 xd05a267dUL, 0 xbd197995UL, 0 xf2d4c000UL, 0 x3fa67c94UL,
0 xec19afa2UL, 0 xbd029efbUL, 0 xd42e0000UL, 0 x3fa466aeUL, 0 x75bdfd28UL,
0 xbd2c1673UL, 0 x2f8d0000UL, 0 x3fa252f3UL, 0 xe021b67bUL, 0 x3d283e9aUL,
0 x89e74000UL, 0 x3fa0415dUL, 0 x5cf1d753UL, 0 x3d0111c0UL, 0 xec148000UL,
0 x3f9c63d2UL, 0 x3f9eb2f3UL, 0 x3d2578c6UL, 0 x28c90000UL, 0 x3f984925UL,
0 x325a0c34UL, 0 xbd2aa0baUL, 0 x25980000UL, 0 x3f9432a9UL, 0 x928637feUL,
0 x3d098139UL, 0 x58938000UL, 0 x3f902056UL, 0 x06e2f7d2UL, 0 xbd23dc5bUL,
0 xa3890000UL, 0 x3f882448UL, 0 xda74f640UL, 0 xbd275577UL, 0 x75890000UL,
0 x3f801015UL, 0 x999d2be8UL, 0 xbd10c76bUL, 0 x59580000UL, 0 x3f700805UL,
0 xcb31c67bUL, 0 x3d2166afUL, 0 x00000000UL, 0 x00000000UL, 0 x00000000UL,
0 x80000000UL, 0 xfefa3800UL, 0 x3fa62e42UL, 0 x93c76730UL, 0 x3ceef357UL,
0 x92492492UL, 0 x3fc24924UL, 0 x00000000UL, 0 xbfd00000UL, 0 x3d6fb175UL,
0 xbfc5555eUL, 0 x55555555UL, 0 x3fd55555UL, 0 x9999999aUL, 0 x3fc99999UL,
0 x00000000UL, 0 xbfe00000UL, 0 x00000000UL, 0 xffffe000UL, 0 x00000000UL,
0 xffffe000UL
};
//registers,
// input: xmm0
// scratch: xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7
// rax, rdx, rcx, rbx (tmp)
void MacroAssembler::fast_log(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3,
XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7,
Register eax, Register ecx, Register edx, Register tmp) {
Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2;
Label L_2TAG_PACKET_10_0_2;
assert_different_registers(tmp, eax, ecx, edx);
address static_const_table = (address)_static_const_table_log;
subl(rsp, 104 );
movl(Address(rsp, 40 ), tmp);
lea(tmp, ExternalAddress(static_const_table));
xorpd(xmm2, xmm2);
movl(eax, 16368 );
pinsrw(xmm2, eax, 3 );
xorpd(xmm3, xmm3);
movl(edx, 30704 );
pinsrw(xmm3, edx, 3 );
movsd(xmm0, Address(rsp, 112 ));
movapd(xmm1, xmm0);
movl(ecx, 32768 );
movdl(xmm4, ecx);
movsd(xmm5, Address(tmp, 2128 )); // 0x00000000UL, 0xffffe000UL
pextrw(eax, xmm0, 3 );
por(xmm0, xmm2);
psllq(xmm0, 5 );
movl(ecx, 16352 );
psrlq(xmm0, 34 );
rcpss(xmm0, xmm0);
psllq(xmm1, 12 );
pshufd(xmm6, xmm5, 228 );
psrlq(xmm1, 12 );
subl(eax, 16 );
cmpl(eax, 32736 );
jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2);
bind(L_2TAG_PACKET_1_0_2);
paddd(xmm0, xmm4);
por(xmm1, xmm3);
movdl(edx, xmm0);
psllq(xmm0, 29 );
pand(xmm5, xmm1);
pand(xmm0, xmm6);
subsd(xmm1, xmm5);
mulpd(xmm5, xmm0);
andl(eax, 32752 );
subl(eax, ecx);
cvtsi2sdl(xmm7, eax);
mulsd(xmm1, xmm0);
movsd(xmm6, Address(tmp, 2064 )); // 0xfefa3800UL, 0x3fa62e42UL
movdqu(xmm3, Address(tmp, 2080 )); // 0x92492492UL, 0x3fc24924UL, 0x00000000UL, 0xbfd00000UL
subsd(xmm5, xmm2);
andl(edx, 16711680 );
shrl(edx, 12 );
movdqu(xmm0, Address(tmp, edx));
movdqu(xmm4, Address(tmp, 2096 )); // 0x3d6fb175UL, 0xbfc5555eUL, 0x55555555UL, 0x3fd55555UL
addsd(xmm1, xmm5);
movdqu(xmm2, Address(tmp, 2112 )); // 0x9999999aUL, 0x3fc99999UL, 0x00000000UL, 0xbfe00000UL
mulsd(xmm6, xmm7);
pshufd(xmm5, xmm1, 68 );
mulsd(xmm7, Address(tmp, 2072 )); // 0x93c76730UL, 0x3ceef357UL, 0x92492492UL, 0x3fc24924UL
mulsd(xmm3, xmm1);
addsd(xmm0, xmm6);
mulpd(xmm4, xmm5);
mulpd(xmm5, xmm5);
pshufd(xmm6, xmm0, 228 );
addsd(xmm0, xmm1);
addpd(xmm4, xmm2);
mulpd(xmm3, xmm5);
subsd(xmm6, xmm0);
mulsd(xmm4, xmm1);
pshufd(xmm2, xmm0, 238 );
addsd(xmm1, xmm6);
mulsd(xmm5, xmm5);
addsd(xmm7, xmm2);
addpd(xmm4, xmm3);
addsd(xmm1, xmm7);
mulpd(xmm4, xmm5);
addsd(xmm1, xmm4);
pshufd(xmm5, xmm4, 238 );
addsd(xmm1, xmm5);
addsd(xmm0, xmm1);
jmp(L_2TAG_PACKET_2_0_2);
bind(L_2TAG_PACKET_0_0_2);
movsd(xmm0, Address(rsp, 112 ));
movdqu(xmm1, xmm0);
addl(eax, 16 );
cmpl(eax, 32768 );
jcc(Assembler::aboveEqual, L_2TAG_PACKET_3_0_2);
cmpl(eax, 16 );
jcc(Assembler::below, L_2TAG_PACKET_4_0_2);
bind(L_2TAG_PACKET_5_0_2);
addsd(xmm0, xmm0);
jmp(L_2TAG_PACKET_2_0_2);
bind(L_2TAG_PACKET_6_0_2);
jcc(Assembler::above, L_2TAG_PACKET_5_0_2);
cmpl(edx, 0 );
jcc(Assembler::above, L_2TAG_PACKET_5_0_2);
jmp(L_2TAG_PACKET_7_0_2);
bind(L_2TAG_PACKET_3_0_2);
movdl(edx, xmm1);
psrlq(xmm1, 32 );
movdl(ecx, xmm1);
addl(ecx, ecx);
cmpl(ecx, -2097152 );
jcc(Assembler::aboveEqual, L_2TAG_PACKET_6_0_2);
orl(edx, ecx);
cmpl(edx, 0 );
jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
bind(L_2TAG_PACKET_7_0_2);
xorpd(xmm1, xmm1);
xorpd(xmm0, xmm0);
movl(eax, 32752 );
pinsrw(xmm1, eax, 3 );
movl(edx, 3 );
mulsd(xmm0, xmm1);
bind(L_2TAG_PACKET_9_0_2);
movsd(Address(rsp, 0 ), xmm0);
movsd(xmm0, Address(rsp, 112 ));
fld_d(Address(rsp, 0 ));
jmp(L_2TAG_PACKET_10_0_2);
bind(L_2TAG_PACKET_8_0_2);
xorpd(xmm1, xmm1);
xorpd(xmm0, xmm0);
movl(eax, 49136 );
pinsrw(xmm0, eax, 3 );
divsd(xmm0, xmm1);
movl(edx, 2 );
jmp(L_2TAG_PACKET_9_0_2);
bind(L_2TAG_PACKET_4_0_2);
movdl(edx, xmm1);
psrlq(xmm1, 32 );
movdl(ecx, xmm1);
orl(edx, ecx);
cmpl(edx, 0 );
jcc(Assembler::equal, L_2TAG_PACKET_8_0_2);
xorpd(xmm1, xmm1);
movl(eax, 18416 );
pinsrw(xmm1, eax, 3 );
mulsd(xmm0, xmm1);
movapd(xmm1, xmm0);
pextrw(eax, xmm0, 3 );
por(xmm0, xmm2);
psllq(xmm0, 5 );
movl(ecx, 18416 );
psrlq(xmm0, 34 );
rcpss(xmm0, xmm0);
psllq(xmm1, 12 );
pshufd(xmm6, xmm5, 228 );
psrlq(xmm1, 12 );
jmp(L_2TAG_PACKET_1_0_2);
bind(L_2TAG_PACKET_2_0_2);
movsd(Address(rsp, 24 ), xmm0);
fld_d(Address(rsp, 24 ));
bind(L_2TAG_PACKET_10_0_2);
movl(tmp, Address(rsp, 40 ));
}
Messung V0.5 in Prozent C=90 H=100 G=95
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-08)
¤
*© Formatika GbR, Deutschland