Dump of assembler code for function JSON_parse_string:
1387	{
=> 0x00007fffefe26430 <+0>:	push   %r15
   0x00007fffefe26432 <+2>:	push   %r14
   0x00007fffefe26434 <+4>:	push   %r13
   0x00007fffefe26436 <+6>:	mov    %rdx,%r13
   0x00007fffefe26439 <+9>:	push   %r12
   0x00007fffefe2643b <+11>:	push   %rbp
   0x00007fffefe2643c <+12>:	mov    %rdi,%rbp
   0x00007fffefe26441 <+17>:	push   %rbx
   0x00007fffefe26442 <+18>:	mov    %rsi,%rbx
   0x00007fffefe26445 <+21>:	sub    $0x38,%rsp
   0x00007fffefe26449 <+25>:	mov    %fs:0x28,%rax
   0x00007fffefe26452 <+34>:	mov    %rax,0x28(%rsp)
   0x00007fffefe26457 <+39>:	xor    %eax,%eax
   0x00007fffefe26459 <+41>:	mov    %rcx,0x10(%rsp)

1388	    int cs = EVIL;
1389	    VALUE match_string;
1390	
1391	    *result = rb_str_buf_new(0);
   0x00007fffefe2643f <+15>:	xor    %edi,%edi
   0x00007fffefe2645e <+46>:	callq  0x7fffefe26170 <rb_str_buf_new@plt>
   0x00007fffefe26463 <+51>:	mov    0x10(%rsp),%rdx
   0x00007fffefe2646b <+59>:	mov    %rax,%r12
   0x00007fffefe2646e <+62>:	mov    %rax,(%rdx)

1392	
1393	
1394		{
1395		cs = JSON_string_start;
   0x00007fffefe26888 <+1112>:	mov    $0x1,%r15d
   0x00007fffefe2688e <+1118>:	jmpq   0x7fffefe26483 <JSON_parse_string+83>

1396		}
1397	
1398	
1399	    json->memo = p;
   0x00007fffefe26471 <+65>:	mov    %rbx,0x18(%rbp)

1400	
1401	
1402		{
1403		if ( p == pe )
   0x00007fffefe26468 <+56>:	cmp    %r13,%rbx
   0x00007fffefe26475 <+69>:	je     0x7fffefe26888 <JSON_parse_string+1112>

1404			goto _test_eof;
1405		switch ( cs )
1406		{
1407	case 1:
1408		if ( (*p) == 34 )
   0x00007fffefe2647e <+78>:	cmpb   $0x22,(%rbx)
   0x00007fffefe26481 <+81>:	je     0x7fffefe264e0 <JSON_parse_string+176>
   0x00007fffefe264e0 <+176>:	mov    %rbx,%r15
   0x00007fffefe26505 <+213>:	mov    %r14,%r15

1409			goto st2;
1410		goto st0;
1411	st0:
1412	cs = 0;
   0x00007fffefe2647b <+75>:	xor    %r15d,%r15d
   0x00007fffefe2672d <+765>:	xor    %r15d,%r15d
   0x00007fffefe26730 <+768>:	jmpq   0x7fffefe26483 <JSON_parse_string+83>
   0x00007fffefe26735 <+773>:	nopl   (%rax)
   0x00007fffefe2692c <+1276>:	xor    %r15d,%r15d
   0x00007fffefe2692f <+1279>:	jmpq   0x7fffefe26483 <JSON_parse_string+83>
   0x00007fffefe26934 <+1284>:	nopl   0x0(%rax)

1413		goto _out;
1414	st2:
1415		if ( ++p == pe )
   0x00007fffefe264e3 <+179>:	lea    0x1(%r15),%r14
   0x00007fffefe264e7 <+183>:	cmp    %r13,%r14
   0x00007fffefe264ea <+186>:	je     0x7fffefe26511 <JSON_parse_string+225>
   0x00007fffefe26508 <+216>:	lea    0x1(%r15),%r14
   0x00007fffefe2650c <+220>:	cmp    %r13,%r14
   0x00007fffefe2650f <+223>:	jne    0x7fffefe264ec <JSON_parse_string+188>
   0x00007fffefe26511 <+225>:	mov    %r13,%rbx

1416			goto _test_eof2;
1417	case 2:
1418		switch( (*p) ) {
   0x00007fffefe264ec <+188>:	movzbl 0x1(%r15),%eax
   0x00007fffefe264f1 <+193>:	cmp    $0x22,%al
   0x00007fffefe264f3 <+195>:	je     0x7fffefe26520 <JSON_parse_string+240>
   0x00007fffefe264f5 <+197>:	cmp    $0x5c,%al
   0x00007fffefe264f7 <+199>:	je     0x7fffefe26678 <JSON_parse_string+584>

1419			case 34: goto tr2;
1420			case 92: goto st3;
1421		}
1422		if ( 0 <= (*p) && (*p) <= 31 )
1423			goto st0;
1424		goto st2;
1425	tr2:
1426	
1427		{
1428	        *result = json_string_unescape(*result, json->memo + 1, p);
   0x00007fffefe26520 <+240>:	add    $0x1,%rbx
   0x00007fffefe265d1 <+417>:	mov    0x10(%rsp),%rdx
   0x00007fffefe265da <+426>:	mov    %r12,(%rdx)
   0x00007fffefe268fe <+1230>:	mov    0x10(%rsp),%rax
   0x00007fffefe26903 <+1235>:	movq   $0x4,(%rax)
   0x00007fffefe2690a <+1242>:	nopw   0x0(%rax,%rax,1)
   0x00007fffefe26910 <+1248>:	mov    %r14,%rbx

1429	        if (NIL_P(*result)) {
   0x00007fffefe265d6 <+422>:	cmp    $0x4,%r12
   0x00007fffefe265dd <+429>:	je     0x7fffefe26910 <JSON_parse_string+1248>

1430	            p--;
1431	            {p++; cs = 8; goto _out;}
   0x00007fffefe26913 <+1251>:	mov    $0x8,%r15d
   0x00007fffefe26919 <+1257>:	jmpq   0x7fffefe26483 <JSON_parse_string+83>

1432	        } else {
1433	            FORCE_UTF8(*result);
   0x00007fffefe265e3 <+435>:	callq  0x7fffefe26130 <rb_utf8_encoding@plt>
   0x00007fffefe265e8 <+440>:	mov    %rax,%rbx
   0x00007fffefe265eb <+443>:	mov    0x10(%rsp),%rax
   0x00007fffefe265f6 <+454>:	mov    (%rax),%rdi
   0x00007fffefe265f9 <+457>:	callq  0x7fffefe261b0 <rb_str_dup@plt>
   0x00007fffefe265fe <+462>:	mov    %rbx,%rsi
   0x00007fffefe26601 <+465>:	mov    %rax,%rdi
   0x00007fffefe26607 <+471>:	callq  0x7fffefe26080 <rb_enc_associate@plt>
   0x00007fffefe2660c <+476>:	mov    0x10(%rsp),%rdx
   0x00007fffefe26611 <+481>:	mov    %rax,(%rdx)

1434	            {p = (( p + 1))-1;}
1435	        }
1436	    }
1437	
1438		{ p--; {p++; cs = 8; goto _out;} }
   0x00007fffefe265f0 <+448>:	mov    $0x8,%r15d
   0x00007fffefe26604 <+468>:	mov    %r14,%rbx
   0x00007fffefe26614 <+484>:	jmpq   0x7fffefe26483 <JSON_parse_string+83>
   0x00007fffefe26619 <+489>:	nopl   0x0(%rax)

1439		goto st8;
1440	st8:
1441		if ( ++p == pe )
1442			goto _test_eof8;
1443	case 8:
1444	
1445		goto st0;
1446	st3:
1447		if ( ++p == pe )
   0x00007fffefe26678 <+584>:	lea    0x2(%r15),%r14
   0x00007fffefe2667c <+588>:	cmp    %r13,%r14
   0x00007fffefe2667f <+591>:	je     0x7fffefe269b7 <JSON_parse_string+1415>
   0x00007fffefe2672a <+762>:	mov    %r14,%rbx
   0x00007fffefe269b7 <+1415>:	mov    %r13,%rbx

1448			goto _test_eof3;
1449	case 3:
1450		if ( (*p) == 117 )
   0x00007fffefe26685 <+597>:	movzbl 0x2(%r15),%eax
   0x00007fffefe2668a <+602>:	cmp    $0x75,%al
   0x00007fffefe2668c <+604>:	jne    0x7fffefe264fd <JSON_parse_string+205>

1451			goto st4;
1452		if ( 0 <= (*p) && (*p) <= 31 )
   0x00007fffefe264fd <+205>:	cmp    $0x1f,%al
   0x00007fffefe264ff <+207>:	jbe    0x7fffefe2672a <JSON_parse_string+762>

1453			goto st0;
1454		goto st2;
1455	st4:
1456		if ( ++p == pe )
   0x00007fffefe26692 <+610>:	lea    0x3(%r15),%rcx
   0x00007fffefe26696 <+614>:	cmp    %r13,%rcx
   0x00007fffefe26699 <+617>:	je     0x7fffefe269e1 <JSON_parse_string+1457>
   0x00007fffefe269e1 <+1457>:	mov    %r13,%rbx

1457			goto _test_eof4;
1458	case 4:
1459		if ( (*p) < 65 ) {
   0x00007fffefe2669f <+623>:	movzbl 0x3(%r15),%eax
   0x00007fffefe266a4 <+628>:	cmp    $0x40,%al
   0x00007fffefe266a6 <+630>:	jle    0x7fffefe2691e <JSON_parse_string+1262>

1460			if ( 48 <= (*p) && (*p) <= 57 )
   0x00007fffefe2691e <+1262>:	sub    $0x30,%eax
   0x00007fffefe26921 <+1265>:	cmp    $0x9,%al
   0x00007fffefe26923 <+1267>:	jbe    0x7fffefe266bb <JSON_parse_string+651>

1461				goto st5;
1462		} else if ( (*p) > 70 ) {
   0x00007fffefe266ac <+636>:	cmp    $0x46,%al
   0x00007fffefe266ae <+638>:	jle    0x7fffefe266bb <JSON_parse_string+651>

1463			if ( 97 <= (*p) && (*p) <= 102 )
   0x00007fffefe266b0 <+640>:	sub    $0x61,%eax
   0x00007fffefe266b3 <+643>:	cmp    $0x5,%al
   0x00007fffefe266b5 <+645>:	ja     0x7fffefe26929 <JSON_parse_string+1273>

1464				goto st5;
1465		} else
1466			goto st5;
1467		goto st0;
1468	st5:
1469		if ( ++p == pe )
   0x00007fffefe266bb <+651>:	lea    0x4(%r15),%rcx
   0x00007fffefe266bf <+655>:	cmp    %r13,%rcx
   0x00007fffefe266c2 <+658>:	je     0x7fffefe269ef <JSON_parse_string+1471>
   0x00007fffefe269ef <+1471>:	mov    %r13,%rbx

1470			goto _test_eof5;
1471	case 5:
1472		if ( (*p) < 65 ) {
   0x00007fffefe266c8 <+664>:	movzbl 0x4(%r15),%eax
   0x00007fffefe266cd <+669>:	cmp    $0x40,%al
   0x00007fffefe266cf <+671>:	jg     0x7fffefe26957 <JSON_parse_string+1319>

1473			if ( 48 <= (*p) && (*p) <= 57 )
   0x00007fffefe266d5 <+677>:	sub    $0x30,%eax
   0x00007fffefe266d8 <+680>:	cmp    $0x9,%al
   0x00007fffefe266da <+682>:	ja     0x7fffefe26929 <JSON_parse_string+1273>

1474				goto st6;
1475		} else if ( (*p) > 70 ) {
   0x00007fffefe26957 <+1319>:	cmp    $0x46,%al
   0x00007fffefe26959 <+1321>:	jle    0x7fffefe266e0 <JSON_parse_string+688>

1476			if ( 97 <= (*p) && (*p) <= 102 )
   0x00007fffefe2695f <+1327>:	sub    $0x61,%eax
   0x00007fffefe26962 <+1330>:	cmp    $0x5,%al
   0x00007fffefe26964 <+1332>:	jbe    0x7fffefe266e0 <JSON_parse_string+688>
   0x00007fffefe2696a <+1338>:	jmp    0x7fffefe26929 <JSON_parse_string+1273>
   0x00007fffefe2696c <+1340>:	nopl   0x0(%rax)

1477				goto st6;
1478		} else
1479			goto st6;
1480		goto st0;
1481	st6:
1482		if ( ++p == pe )
   0x00007fffefe266e0 <+688>:	lea    0x5(%r15),%rcx
   0x00007fffefe266e4 <+692>:	cmp    %r13,%rcx
   0x00007fffefe266e7 <+695>:	je     0x7fffefe269c5 <JSON_parse_string+1429>
   0x00007fffefe26929 <+1273>:	mov    %rcx,%rbx
   0x00007fffefe269c5 <+1429>:	mov    %r13,%rbx

1483			goto _test_eof6;
1484	case 6:
1485		if ( (*p) < 65 ) {
   0x00007fffefe266ed <+701>:	movzbl 0x5(%r15),%eax
   0x00007fffefe266f2 <+706>:	cmp    $0x40,%al
   0x00007fffefe266f4 <+708>:	jg     0x7fffefe26970 <JSON_parse_string+1344>

1486			if ( 48 <= (*p) && (*p) <= 57 )
   0x00007fffefe266fa <+714>:	sub    $0x30,%eax
   0x00007fffefe266fd <+717>:	cmp    $0x9,%al
   0x00007fffefe266ff <+719>:	ja     0x7fffefe26929 <JSON_parse_string+1273>

1487				goto st7;
1488		} else if ( (*p) > 70 ) {
   0x00007fffefe26970 <+1344>:	cmp    $0x46,%al
   0x00007fffefe26972 <+1346>:	jle    0x7fffefe26705 <JSON_parse_string+725>

1489			if ( 97 <= (*p) && (*p) <= 102 )
   0x00007fffefe26978 <+1352>:	sub    $0x61,%eax
   0x00007fffefe2697b <+1355>:	cmp    $0x5,%al
   0x00007fffefe2697d <+1357>:	nopl   (%rax)
   0x00007fffefe26980 <+1360>:	jbe    0x7fffefe26705 <JSON_parse_string+725>
   0x00007fffefe26986 <+1366>:	jmp    0x7fffefe26929 <JSON_parse_string+1273>
   0x00007fffefe26988 <+1368>:	nopl   0x0(%rax,%rax,1)

1490				goto st7;
1491		} else
1492			goto st7;
1493		goto st0;
1494	st7:
1495		if ( ++p == pe )
   0x00007fffefe26705 <+725>:	lea    0x6(%r15),%r14
   0x00007fffefe26709 <+729>:	cmp    %r13,%r14
   0x00007fffefe2670c <+732>:	je     0x7fffefe269d3 <JSON_parse_string+1443>
   0x00007fffefe269d3 <+1443>:	mov    %r13,%rbx

1496			goto _test_eof7;
1497	case 7:
1498		if ( (*p) < 65 ) {
   0x00007fffefe26712 <+738>:	movzbl 0x6(%r15),%eax
   0x00007fffefe26717 <+743>:	cmp    $0x40,%al
   0x00007fffefe26719 <+745>:	jg     0x7fffefe26990 <JSON_parse_string+1376>

1499			if ( 48 <= (*p) && (*p) <= 57 )
   0x00007fffefe2671f <+751>:	sub    $0x30,%eax
   0x00007fffefe26722 <+754>:	cmp    $0x9,%al
   0x00007fffefe26724 <+756>:	jbe    0x7fffefe26505 <JSON_parse_string+213>

1500				goto st2;
1501		} else if ( (*p) > 70 ) {
   0x00007fffefe26990 <+1376>:	cmp    $0x46,%al
   0x00007fffefe26992 <+1378>:	jle    0x7fffefe26505 <JSON_parse_string+213>

1502			if ( 97 <= (*p) && (*p) <= 102 )
   0x00007fffefe26998 <+1384>:	sub    $0x61,%eax
   0x00007fffefe2699b <+1387>:	cmp    $0x5,%al
   0x00007fffefe2699d <+1389>:	nopl   (%rax)
   0x00007fffefe269a0 <+1392>:	jbe    0x7fffefe26505 <JSON_parse_string+213>
   0x00007fffefe269a6 <+1398>:	jmpq   0x7fffefe2672a <JSON_parse_string+762>
   0x00007fffefe269ab <+1403>:	nopl   0x0(%rax,%rax,1)

1503				goto st2;
1504		} else
1505			goto st2;
1506		goto st0;
1507		}
1508		_test_eof2: cs = 2; goto _test_eof;
   0x00007fffefe26514 <+228>:	mov    $0x2,%r15d
   0x00007fffefe2651a <+234>:	jmpq   0x7fffefe26483 <JSON_parse_string+83>
   0x00007fffefe2651f <+239>:	nop

1509		_test_eof8: cs = 8; goto _test_eof;
1510		_test_eof3: cs = 3; goto _test_eof;
   0x00007fffefe269ba <+1418>:	mov    $0x3,%r15d
   0x00007fffefe269c0 <+1424>:	jmpq   0x7fffefe26483 <JSON_parse_string+83>

1511		_test_eof4: cs = 4; goto _test_eof;
   0x00007fffefe269e4 <+1460>:	mov    $0x4,%r15d
   0x00007fffefe269ea <+1466>:	jmpq   0x7fffefe26483 <JSON_parse_string+83>

1512		_test_eof5: cs = 5; goto _test_eof;
   0x00007fffefe269f2 <+1474>:	mov    $0x5,%r15d
   0x00007fffefe269f8 <+1480>:	jmpq   0x7fffefe26483 <JSON_parse_string+83>

1513		_test_eof6: cs = 6; goto _test_eof;
   0x00007fffefe269c8 <+1432>:	mov    $0x6,%r15d
   0x00007fffefe269ce <+1438>:	jmpq   0x7fffefe26483 <JSON_parse_string+83>

1514		_test_eof7: cs = 7; goto _test_eof;
   0x00007fffefe269d6 <+1446>:	mov    $0x7,%r15d
   0x00007fffefe269dc <+1452>:	jmpq   0x7fffefe26483 <JSON_parse_string+83>

1515	
1516		_test_eof: {}
1517		_out: {}
1518		}
1519	
1520	
1521	
1522	    if (json->create_additions && RTEST(match_string = json->match_string)) {
   0x00007fffefe26483 <+83>:	mov    0x50(%rbp),%ecx
   0x00007fffefe26486 <+86>:	test   %ecx,%ecx
   0x00007fffefe26488 <+88>:	je     0x7fffefe2649b <JSON_parse_string+107>
   0x00007fffefe2648a <+90>:	mov    0x58(%rbp),%r12
   0x00007fffefe2648e <+94>:	test   $0xfffffffffffffffb,%r12
   0x00007fffefe26495 <+101>:	jne    0x7fffefe26738 <JSON_parse_string+776>

1523	          VALUE klass;
1524	          VALUE memo = rb_ary_new2(2);
   0x00007fffefe26738 <+776>:	mov    $0x2,%edi
   0x00007fffefe2673d <+781>:	callq  0x7fffefe26200 <rb_ary_new2@plt>
   0x00007fffefe26742 <+786>:	mov    %rax,%r14

1525	          rb_ary_push(memo, *result);
   0x00007fffefe26745 <+789>:	mov    0x10(%rsp),%rax
   0x00007fffefe2674a <+794>:	mov    %r14,%rdi
   0x00007fffefe2674d <+797>:	mov    (%rax),%rsi
   0x00007fffefe26750 <+800>:	callq  0x7fffefe261f0 <rb_ary_push@plt>

1526	          rb_hash_foreach(match_string, match_i, memo);
   0x00007fffefe26755 <+805>:	lea    0xad4(%rip),%rsi        # 0x7fffefe27230 <match_i>
   0x00007fffefe2675c <+812>:	mov    %r14,%rdx
   0x00007fffefe2675f <+815>:	mov    %r12,%rdi
   0x00007fffefe26762 <+818>:	callq  0x7fffefe26180 <rb_hash_foreach@plt>

1527	          klass = rb_ary_entry(memo, 1);
   0x00007fffefe26767 <+823>:	mov    $0x1,%esi
   0x00007fffefe2676c <+828>:	mov    %r14,%rdi
   0x00007fffefe2676f <+831>:	callq  0x7fffefe26070 <rb_ary_entry@plt>

1528	          if (RTEST(klass)) {
   0x00007fffefe26774 <+836>:	test   $0xfffffffffffffffb,%rax
   0x00007fffefe2677a <+842>:	je     0x7fffefe2649b <JSON_parse_string+107>

1529	              *result = rb_funcall(klass, i_json_create, 1, *result);
   0x00007fffefe26780 <+848>:	mov    0x10(%rsp),%rdx
   0x00007fffefe26785 <+853>:	mov    0x204a2c(%rip),%rsi        # 0x7ffff002b1b8 <i_json_create>
   0x00007fffefe2678c <+860>:	mov    %rax,%rdi
   0x00007fffefe2678f <+863>:	xor    %eax,%eax
   0x00007fffefe26791 <+865>:	mov    (%rdx),%rcx
   0x00007fffefe26794 <+868>:	mov    $0x1,%edx
   0x00007fffefe26799 <+873>:	callq  0x7fffefe260c0 <rb_funcall@plt>
   0x00007fffefe2679e <+878>:	mov    0x10(%rsp),%rdx
   0x00007fffefe267a3 <+883>:	mov    %rax,(%rdx)
   0x00007fffefe267a6 <+886>:	jmpq   0x7fffefe2649b <JSON_parse_string+107>
   0x00007fffefe267ab <+891>:	nopl   0x0(%rax,%rax,1)

1530	          }
1531	    }
1532	
1533	    if (json->symbolize_names && json->parsing_name) {
   0x00007fffefe2649b <+107>:	mov    0x38(%rbp),%edx
   0x00007fffefe2649e <+110>:	test   %edx,%edx
   0x00007fffefe264a0 <+112>:	je     0x7fffefe264ad <JSON_parse_string+125>
   0x00007fffefe264a2 <+114>:	mov    0x34(%rbp),%eax
   0x00007fffefe264a5 <+117>:	test   %eax,%eax
   0x00007fffefe264a7 <+119>:	jne    0x7fffefe267b0 <JSON_parse_string+896>

1534	      *result = rb_str_intern(*result);
   0x00007fffefe267b0 <+896>:	mov    0x10(%rsp),%rax
   0x00007fffefe267b5 <+901>:	mov    (%rax),%rdi
   0x00007fffefe267b8 <+904>:	callq  0x7fffefe26290 <rb_str_intern@plt>
   0x00007fffefe267bd <+909>:	mov    0x10(%rsp),%rdx
   0x00007fffefe267c2 <+914>:	mov    %rax,(%rdx)
   0x00007fffefe267c5 <+917>:	jmpq   0x7fffefe264ad <JSON_parse_string+125>
   0x00007fffefe267ca <+922>:	nopw   0x0(%rax,%rax,1)

1535	    }
1536	    if (cs >= JSON_string_first_final) {
1537	        return p + 1;
   0x00007fffefe264ad <+125>:	add    $0x1,%rbx
   0x00007fffefe264b1 <+129>:	xor    %eax,%eax
   0x00007fffefe264b3 <+131>:	cmp    $0x8,%r15d
   0x00007fffefe264b7 <+135>:	cmove  %rbx,%rax

1538	    } else {
1539	        return NULL;
1540	    }
1541	}
   0x00007fffefe264bb <+139>:	mov    0x28(%rsp),%rdx
   0x00007fffefe264c0 <+144>:	xor    %fs:0x28,%rdx
   0x00007fffefe264c9 <+153>:	jne    0x7fffefe269fd <JSON_parse_string+1485>
   0x00007fffefe264cf <+159>:	add    $0x38,%rsp
   0x00007fffefe264d3 <+163>:	pop    %rbx
   0x00007fffefe264d4 <+164>:	pop    %rbp
   0x00007fffefe264d5 <+165>:	pop    %r12
   0x00007fffefe264d7 <+167>:	pop    %r13
   0x00007fffefe264d9 <+169>:	pop    %r14
   0x00007fffefe264db <+171>:	pop    %r15
   0x00007fffefe264dd <+173>:	retq   
   0x00007fffefe264de <+174>:	xchg   %ax,%ax
   0x00007fffefe269fd <+1485>:	callq  0x7fffefe260a0 <__stack_chk_fail@plt>
   0x00007fffefe26a02:	data32 data32 data32 data32 nopw %cs:0x0(%rax,%rax,1)

End of assembler dump.

