This commit is contained in:
lemire
2024-04-09 00:40:43 +00:00
parent f5b8726f2b
commit fff05b87fc
7 changed files with 16 additions and 16 deletions
+4 -4
View File
@@ -102,10 +102,10 @@ $(document).ready(function(){initNavTree('arm64_2numberparsing__defs_8h_source.h
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; </div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#if SIMDJSON_IS_ARM64</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#if _M_ARM64</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// __umulh requires intrin.h</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;intrin.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// SIMDJSON_IS_ARM64</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _M_ARM64</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacesimdjson.html">simdjson</a> {</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">namespace </span>arm64 {</div>
@@ -124,13 +124,13 @@ $(document).ready(function(){initNavTree('arm64_2numberparsing__defs_8h_source.h
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t value2) {</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; internal::value128 answer;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#if SIMDJSON_REGULAR_VISUAL_STUDIO || SIMDJSON_IS_32BITS</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#if SIMDJSON_IS_ARM64</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#ifdef _M_ARM64</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// ARM64 has native support for 64-bit multiplications, no need to emultate</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; answer.high = __umulh(value1, value2);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; answer.low = value1 * value2;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; answer.low = _umul128(value1, value2, &amp;answer.high); <span class="comment">// _umul128 not available on ARM64</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// SIMDJSON_IS_ARM64</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _M_ARM64</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#else </span><span class="comment">// SIMDJSON_REGULAR_VISUAL_STUDIO || SIMDJSON_IS_32BITS</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; __uint128_t r = (<span class="keyword">static_cast&lt;</span>__uint128_t<span class="keyword">&gt;</span>(value1)) * value2;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; answer.low = uint64_t(r);</div>
+2 -2
View File
@@ -146,13 +146,13 @@ $(document).ready(function(){initNavTree('fallback_2numberparsing__defs_8h_sourc
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t value2) {</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; internal::value128 answer;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#if SIMDJSON_REGULAR_VISUAL_STUDIO || SIMDJSON_IS_32BITS</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#if SIMDJSON_IS_ARM64</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#ifdef _M_ARM64</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="comment">// ARM64 has native support for 64-bit multiplications, no need to emultate</span></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; answer.high = __umulh(value1, value2);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; answer.low = value1 * value2;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; answer.low = _umul128(value1, value2, &amp;answer.high); <span class="comment">// _umul128 not available on ARM64</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// SIMDJSON_IS_ARM64</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _M_ARM64</span></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="preprocessor">#else </span><span class="comment">// SIMDJSON_REGULAR_VISUAL_STUDIO || SIMDJSON_IS_32BITS</span></div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; __uint128_t r = (<span class="keyword">static_cast&lt;</span>__uint128_t<span class="keyword">&gt;</span>(value1)) * value2;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; answer.low = uint64_t(r);</div>
+2 -2
View File
@@ -128,13 +128,13 @@ $(document).ready(function(){initNavTree('haswell_2numberparsing__defs_8h_source
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t value2) {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; internal::value128 answer;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#if SIMDJSON_REGULAR_VISUAL_STUDIO || SIMDJSON_IS_32BITS</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#if SIMDJSON_IS_ARM64</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#ifdef _M_ARM64</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">// ARM64 has native support for 64-bit multiplications, no need to emultate</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; answer.high = __umulh(value1, value2);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; answer.low = value1 * value2;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; answer.low = _umul128(value1, value2, &amp;answer.high); <span class="comment">// _umul128 not available on ARM64</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// SIMDJSON_IS_ARM64</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _M_ARM64</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#else </span><span class="comment">// SIMDJSON_REGULAR_VISUAL_STUDIO || SIMDJSON_IS_32BITS</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; __uint128_t r = (<span class="keyword">static_cast&lt;</span>__uint128_t<span class="keyword">&gt;</span>(value1)) * value2;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; answer.low = uint64_t(r);</div>
+2 -2
View File
@@ -125,13 +125,13 @@ $(document).ready(function(){initNavTree('icelake_2numberparsing__defs_8h_source
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t value2) {</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; internal::value128 answer;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#if SIMDJSON_REGULAR_VISUAL_STUDIO || SIMDJSON_IS_32BITS</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#if SIMDJSON_IS_ARM64</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#ifdef _M_ARM64</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">// ARM64 has native support for 64-bit multiplications, no need to emultate</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; answer.high = __umulh(value1, value2);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; answer.low = value1 * value2;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; answer.low = _umul128(value1, value2, &amp;answer.high); <span class="comment">// _umul128 not available on ARM64</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// SIMDJSON_IS_ARM64</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _M_ARM64</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#else </span><span class="comment">// SIMDJSON_REGULAR_VISUAL_STUDIO || SIMDJSON_IS_32BITS</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; __uint128_t r = (<span class="keyword">static_cast&lt;</span>__uint128_t<span class="keyword">&gt;</span>(value1)) * value2;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; answer.low = uint64_t(r);</div>
+2 -2
View File
@@ -115,9 +115,9 @@ $(document).ready(function(){initNavTree('portability_8h_source.html',''); initR
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// __clang__</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _MSC_VER</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#if (defined(__x86_64__) || defined(_M_AMD64)) &amp;&amp; !defined(_M_ARM64EC)</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#if defined(__x86_64__) || defined(_M_AMD64)</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#define SIMDJSON_IS_X86_64 1</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#elif defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#elif defined(__aarch64__) || defined(_M_ARM64)</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#define SIMDJSON_IS_ARM64 1</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#elif defined(__riscv) &amp;&amp; __riscv_xlen == 64</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#define SIMDJSON_IS_RISCV64 1</span></div>
+2 -2
View File
@@ -132,13 +132,13 @@ $(document).ready(function(){initNavTree('ppc64_2numberparsing__defs_8h_source.h
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t value2) {</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; internal::value128 answer;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#if SIMDJSON_REGULAR_VISUAL_STUDIO || SIMDJSON_IS_32BITS</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#if SIMDJSON_IS_ARM64</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#ifdef _M_ARM64</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="comment">// ARM64 has native support for 64-bit multiplications, no need to emultate</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; answer.high = __umulh(value1, value2);</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; answer.low = value1 * value2;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; answer.low = _umul128(value1, value2, &amp;answer.high); <span class="comment">// _umul128 not available on ARM64</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// SIMDJSON_IS_ARM64</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _M_ARM64</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#else </span><span class="comment">// SIMDJSON_REGULAR_VISUAL_STUDIO || SIMDJSON_IS_32BITS</span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; __uint128_t r = (<span class="keyword">static_cast&lt;</span>__uint128_t<span class="keyword">&gt;</span>(value1)) * value2;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; answer.low = uint64_t(r);</div>
+2 -2
View File
@@ -126,13 +126,13 @@ $(document).ready(function(){initNavTree('westmere_2numberparsing__defs_8h_sourc
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t value2) {</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; internal::value128 answer;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#if SIMDJSON_REGULAR_VISUAL_STUDIO || SIMDJSON_IS_32BITS</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#if SIMDJSON_IS_ARM64</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#ifdef _M_ARM64</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// ARM64 has native support for 64-bit multiplications, no need to emultate</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; answer.high = __umulh(value1, value2);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; answer.low = value1 * value2;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#else</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; answer.low = _umul128(value1, value2, &amp;answer.high); <span class="comment">// _umul128 not available on ARM64</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// SIMDJSON_IS_ARM64</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _M_ARM64</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#else </span><span class="comment">// SIMDJSON_REGULAR_VISUAL_STUDIO || SIMDJSON_IS_32BITS</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; __uint128_t r = (<span class="keyword">static_cast&lt;</span>__uint128_t<span class="keyword">&gt;</span>(value1)) * value2;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; answer.low = uint64_t(r);</div>