perpare for more compact bit operations in JS (#16728)
This commit is contained in:
parent
0300203e81
commit
a0fddfecd4
2 changed files with 20 additions and 7 deletions
|
|
@ -159,14 +159,15 @@ func isNaN*(x: SomeFloat): bool {.inline, since: (1,5,1).} =
|
||||||
else: result = c_isnan(x)
|
else: result = c_isnan(x)
|
||||||
|
|
||||||
when defined(js):
|
when defined(js):
|
||||||
|
import std/private/jsutils
|
||||||
|
|
||||||
proc toBitsImpl(x: float): array[2, uint32] =
|
proc toBitsImpl(x: float): array[2, uint32] =
|
||||||
asm """
|
let buffer = newArrayBuffer(8)
|
||||||
const buffer = new ArrayBuffer(8);
|
let floatBuffer = newFloat64Array(buffer)
|
||||||
const floatBuffer = new Float64Array(buffer);
|
let uintBuffer = newUint32Array(buffer)
|
||||||
const uintBuffer = new Uint32Array(buffer);
|
floatBuffer[0] = x
|
||||||
floatBuffer[0] = `x`;
|
{.emit: "`result` = `uintBuffer`;".}
|
||||||
`result` = uintBuffer
|
# result = cast[array[2, uint32]](uintBuffer)
|
||||||
"""
|
|
||||||
|
|
||||||
proc signbit*(x: SomeFloat): bool {.inline, since: (1, 5, 1).} =
|
proc signbit*(x: SomeFloat): bool {.inline, since: (1, 5, 1).} =
|
||||||
## Returns true if `x` is negative, false otherwise.
|
## Returns true if `x` is negative, false otherwise.
|
||||||
|
|
|
||||||
12
lib/std/private/jsutils.nim
Normal file
12
lib/std/private/jsutils.nim
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
when defined(js):
|
||||||
|
type
|
||||||
|
ArrayBuffer* = ref object of JsRoot
|
||||||
|
Float64Array* = ref object of JsRoot
|
||||||
|
Uint32Array* = ref object of JsRoot
|
||||||
|
|
||||||
|
func newArrayBuffer*(n: int): ArrayBuffer {.importjs: "new ArrayBuffer(#)".}
|
||||||
|
func newFloat64Array*(buffer: ArrayBuffer): Float64Array {.importjs: "new Float64Array(#)".}
|
||||||
|
func newUint32Array*(buffer: ArrayBuffer): Uint32Array {.importjs: "new Uint32Array(#)".}
|
||||||
|
|
||||||
|
func `[]`*(arr: Uint32Array, i: int): uint32 {.importjs: "#[#]".}
|
||||||
|
func `[]=`*(arr: Float64Array, i: int, v: float) {.importjs: "#[#] = #".}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue