Created
April 15, 2020 07:16
-
-
Save dominictarr/ff00c27a6ce48c23bc36dfb0a25c5496 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(module | |
;; an operation defined inside a macro | |
(def op_mac (mac (a b) (block | |
&[i32_load (mod a 1000)] | |
))) | |
;;a function that contains that macro | |
(def op_fun (fun (a b) (op_mac a b) )) | |
(def N 10000000) | |
;;do the function call inside a loop | |
(export calls (fun () {block | |
(def i 0) | |
(loop | |
(lt i N) | |
(block | |
(def i (add i 1)) | |
(op_fun i 10) ;;call a small function | |
) | |
) | |
})) | |
;;inline the op into the loop (so no calls) | |
(export inlines (fun () {block | |
(def i 0) | |
(loop | |
(lt i N) | |
(block | |
(def i (add i 1)) | |
(op_mac i 0) | |
) | |
) | |
})) | |
;; macro to inline N ops | |
(def unroll (mac R [n op] | |
(if n | |
(block | |
(def n (sub n 1)) | |
&(block (R n op) op) | |
) | |
op | |
))) | |
;; a loop with the op inlined in batches of 100 | |
(export unrolled (fun () {block | |
(def i 0) | |
(loop | |
(lt i N) | |
(block | |
(def i (add i 100)) | |
;;(op_mac) | |
(unroll 100 (op_mac i 0)) | |
0 | |
) | |
) | |
})) | |
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(module (memory (export "memory") | |
1) | |
(global $FREE (mut i32) (i32.const 0)) | |
(func (result i32) | |
(local $i i32) | |
(local $batch i32) | |
(local $1 i32) | |
(local.set $i (i32.const 0)) | |
(local.set $batch (i32.const 1000)) | |
(loop (if | |
(i32.lt_s (local.get $i) (i32.const 10000000)) | |
(then | |
(local.set $i (i32.add (local.get $i) (i32.const 100))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(i32.load (i32.rem_s (local.get $i) (i32.const 1000))) | |
(local.set $1 (i32.const 0)) | |
(br 1)))) | |
(local.get $1) | |
) | |
(func (result i32) | |
(local $i i32) | |
(local $1 i32) | |
(local.set $i (i32.const 0)) | |
(loop (if | |
(i32.lt_s (local.get $i) (i32.const 10000000)) | |
(then | |
(local.set $i (i32.add (local.get $i) (i32.const 1))) | |
(local.set | |
$1 (i32.load (i32.rem_s (local.get $i) (i32.const 1000)))) | |
(br 1)))) | |
(local.get $1)) | |
(func (param $a i32) (param $b i32) (result i32) | |
(i32.load (i32.rem_s (local.get $a) (i32.const 1000)))) | |
(func (result i32) | |
(local $i i32) | |
(local $1 i32) | |
(local.set $i (i32.const 0)) | |
(loop (if | |
(i32.lt_s (local.get $i) (i32.const 10000000)) | |
(then | |
(local.set $i (i32.add (local.get $i) (i32.const 1))) | |
(local.set $1 | |
(call 2 | |
(local.get $i) | |
(i32.const 10))) | |
(br 1)))) | |
(local.get $1)) | |
(export "calls" (func 3)) | |
(export "inlines" (func 1)) | |
(export "unrolled" (func 0)) | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
VoIP facilitates advanced collaboration through a variety of tools that enhance remote work capabilities. Video conferencing features, for example, not only enable face-to-face meetings but also support screen sharing and virtual whiteboards, fostering interactive discussions and real-time collaboration on documents and presentations https://onecloudnetworks.com/voip-for-car-dealerships/. These tools are essential for remote teams, allowing them to maintain productivity and engagement regardless of their physical location. Additionally, VoIP"s integration with collaboration platforms like Microsoft Teams and Slack further enhances teamwork by centralizing communication channels and project management tools in one unified interface.