mirror of
				https://github.com/ton-blockchain/ton
				synced 2025-03-09 15:40:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			102 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
"Asm.fif" include
 | 
						|
 | 
						|
PROGRAM{
 | 
						|
 | 
						|
NEWPROC load_dict
 | 
						|
NEWPROC generate_dict
 | 
						|
NEWPROC save_dict
 | 
						|
 | 
						|
NEWPROC do_get
 | 
						|
NEWPROC do_set
 | 
						|
NEWPROC do_erase
 | 
						|
 | 
						|
main PROC:<{
 | 
						|
  DUP 1 INT EQUAL IF:<{
 | 
						|
   DROP
 | 
						|
   do_get CALL
 | 
						|
  }>ELSE<{
 | 
						|
  DUP 2 INT EQUAL IF:<{
 | 
						|
   DROP
 | 
						|
   do_set CALL
 | 
						|
  }>ELSE<{
 | 
						|
  DUP 3 INT EQUAL IF:<{
 | 
						|
   DROP
 | 
						|
   do_erase CALL
 | 
						|
  }> }> }>
 | 
						|
  -1 INT
 | 
						|
}>
 | 
						|
 | 
						|
do_get PROC:<{
 | 
						|
 load_dict CALL
 | 
						|
 32 INT
 | 
						|
 DICTIGET
 | 
						|
}>
 | 
						|
 | 
						|
do_set PROC:<{
 | 
						|
 load_dict CALL
 | 
						|
 32 INT
 | 
						|
 DICTISET
 | 
						|
 save_dict CALL
 | 
						|
}>
 | 
						|
 | 
						|
do_erase PROC:<{
 | 
						|
 load_dict CALL
 | 
						|
 32 INT
 | 
						|
 DICTIDEL
 | 
						|
 DROP
 | 
						|
 save_dict CALL
 | 
						|
}>
 | 
						|
 | 
						|
generate_dict PROC:<{
 | 
						|
  4 INT 100 INT REPEAT:<{
 | 
						|
    DUP 2DUP MUL ROT 617 INT ADD 1000 INT MOD
 | 
						|
  }>
 | 
						|
  DROP 100 INT
 | 
						|
  NEWDICT
 | 
						|
  SWAP REPEAT:<{
 | 
						|
    s0 s2 XCHG
 | 
						|
    NEWC
 | 
						|
    16 STU
 | 
						|
    s0 s2 XCHG
 | 
						|
    32 INT
 | 
						|
    DICTISETB
 | 
						|
  }>
 | 
						|
}>
 | 
						|
 | 
						|
load_dict PROC:<{
 | 
						|
  PUSHROOT
 | 
						|
  CTOS DUP SEMPTY IF:<{
 | 
						|
    DROP
 | 
						|
    generate_dict CALL
 | 
						|
  }>
 | 
						|
}>
 | 
						|
 | 
						|
save_dict PROC:<{
 | 
						|
  NEWC
 | 
						|
  STSLICE
 | 
						|
  ENDC
 | 
						|
  POPROOT
 | 
						|
}>
 | 
						|
 | 
						|
}END>s constant pmc_prog
 | 
						|
 | 
						|
{ 1 2 rot pmc_prog } : task_pmc_get
 | 
						|
{ 2 3 rot pmc_prog } : task_pmc_set
 | 
						|
{ 3 2 rot pmc_prog } : task_pmc_erase
 | 
						|
 | 
						|
{ task_pmc_get dbrunvm 2drop } : pmc_get
 | 
						|
{ task_pmc_set dbrunvm 2drop } : pmc_set
 | 
						|
{ task_pmc_erase dbrunvm 2drop } : pmc_erase
 | 
						|
 | 
						|
<b x{abacaba} s, <b x{dead} s, x{1dead} sr, b> <s sr, b> <s constant test_value
 | 
						|
 | 
						|
// 123 "a" pmc_get
 | 
						|
// { csr. } if
 | 
						|
//  123 "a" pmc_set
 | 
						|
 | 
						|
// test_value 123 x{a} task_pmc_set test_value 123 x{b} task_pmc_set test_value 123 x{c} task_pmc_set 3 3 dbrunvm-parallel
 | 
						|
 | 
						|
{ test_value 150 rot task_pmc_set } 0 { 1 + 2dup swap execute 7 roll 7 roll } 10000 times 2drop 10000 4 dbrunvm-parallel
 | 
						|
 | 
						|
// 123 "a" task_pmc_get 123 "b" task_pmc_get 123 "c" task_pmc_get 3 dbrunvm-parallel
 | 
						|
 |