399
419
#define H ((Hist*)0)
413
OADD, OSUB, OOR, OXOR, OADDSTR,
417
OARRAYBYTESTR, OARRAYRUNESTR,
418
OSTRARRAYBYTE, OSTRARRAYRUNE,
419
OAS, OAS2, OAS2FUNC, OAS2RECV, OAS2MAPR, OAS2DOTTYPE,
422
OCALL, OCALLFUNC, OCALLMETH, OCALLINTER,
427
OCOMPLIT, OMAPLIT, OSTRUCTLIT, OARRAYLIT, OPTRLIT,
428
OCONV, OCONVIFACE, OCONVNOP,
430
ODCL, ODCLFUNC, ODCLFIELD, ODCLCONST, ODCLTYPE,
432
ODOT, ODOTPTR, ODOTMETH, ODOTINTER, OXDOT,
435
OEQ, ONE, OLT, OLE, OGE, OGT,
440
OMAKE, OMAKECHAN, OMAKEMAP, OMAKESLICE,
441
OHMUL, ORRC, OLRC, // high-mul and rotate-carry
442
OMUL, ODIV, OMOD, OLSH, ORSH, OAND, OANDNOT,
444
ONOT, OCOM, OPLUS, OMINUS,
446
OPANIC, OPRINT, OPRINTN,
449
OSLICE, OSLICEARR, OSLICESTR,
456
OREAL, OIMAG, OCOMPLEX,
475
OTYPESW, // l = r.(type)
427
ONAME, // var, const or func name
428
ONONAME, // unnamed arg or return value: f(int, string) (int, error) { etc }
438
OADDSTR, // s + "foo"
442
OARRAYBYTESTR, // string(bytes)
443
OARRAYRUNESTR, // string(runes)
444
OSTRARRAYBYTE, // []byte(s)
445
OSTRARRAYRUNE, // []rune(s)
446
OAS, // x = y or x := y
447
OAS2, // x, y, z = xx, yy, zz
448
OAS2FUNC, // x, y = f()
449
OAS2RECV, // x, ok = <-c
450
OAS2MAPR, // x, ok = m["foo"]
451
OAS2DOTTYPE, // x, ok = I.(int)
453
OCALL, // function call, method call or type conversion, possibly preceded by defer or go.
455
OCALLMETH, // t.Method()
456
OCALLINTER, // err.Error()
457
OCALLPART, // t.Method (without ())
460
OCLOSURE, // f = func() { etc }
461
OCMPIFACE, // err1 == err2
463
OCOMPLIT, // composite literal, typechecking may convert to a more specific OXXXLIT.
464
OMAPLIT, // M{"foo":3, "bar":4}
465
OSTRUCTLIT, // T{x:3, y:4}
466
OARRAYLIT, // [2]int{3, 4}
467
OPTRLIT, // &T{x:3, y:4}
468
OCONV, // var i int; var u uint; i = int(u)
470
OCONVNOP, // type Int int; var i int; var j Int; i = int(j)
473
ODCLFUNC, // func f() or func (r) f()
474
ODCLFIELD, // struct field, interface field, or func/method argument/return value.
475
ODCLCONST, // const pi = 3.14
476
ODCLTYPE, // type Int int
479
ODOTPTR, // p.x that is implicitly (*p).x
480
ODOTMETH, // t.Method
481
ODOTINTER, // err.Error
482
OXDOT, // t.x, typechecking may convert to a more specific ODOTXXX.
483
ODOTTYPE, // e = err.(MyErr)
484
ODOTTYPE2, // e, ok = err.(MyErr)
494
OKEY, // The x:3 in t{x:3, y:4}, the 1:2 in a[1:2], the 2:20 in [3]int{2:20}, etc.
495
OPARAM, // The on-stack copy of a parameter or return value that escapes.
497
OMAKE, // make, typechecking may convert to a more specfic OMAKEXXX.
498
OMAKECHAN, // make(chan int)
499
OMAKEMAP, // make(map[string]int)
500
OMAKESLICE, // make([]int, 0)
519
OSLICE, // v[1:2], typechecking may convert to a more specfic OSLICEXXX.
524
ORUNESTR, // string(i)
525
OSELRECV, // case x = <-c:
526
OSELRECV2, // case x, ok = <-c:
533
OBLOCK, // block of code
535
OCASE, // case, after being verified by swt.c's casebody.
536
OXCASE, // case, before verification.
537
OCONTINUE, // continue
540
OFALL, // fallthrough, after being verified by swt.c's casebody.
541
OXFALL, // fallthrough, before verification.
551
OTYPESW, // switch err.(type)
555
OTMAP, // map[string]int
556
OTSTRUCT, // struct{}
557
OTINTER, // interface{}
559
OTARRAY, // []int, [8]int, [N]int or [...]int
489
OINLCALL, // intermediary representation of an inlined call
490
OITAB, // itable word of interface value
493
OCMP, ODEC, OEXTEND, OINC, OREGISTER, OINDREG,
563
ODDD, // func f(args ...int) or f(l...) or var a = [...]int{0, 1, 2}.
564
ODDDARG, // func f(args ...int), introduced by escape analysis.
565
OINLCALL, // intermediary representation of an inlined call.
566
OEFACE, // itable and data words of an empty-interface value.
567
OITAB, // itable word of an interface value.
568
OCLOSUREVAR, // variable reference at beginning of closure function
569
OCFUNC, // reference to c function pointer (not go func value)
570
OCHECKNOTNIL, // emit code to ensure pointer/interface not nil
572
// arch-specific registers
573
OREGISTER, // a register, such as AX.
574
OINDREG, // offset plus indirect of a register, such as 8(SP).
576
// 386/amd64-specific opcodes
577
OCMP, // compare: ACMP.
578
ODEC, // decrement: ADEC.
579
OINC, // increment: AINC.
580
OEXTEND, // extend: ACWD/ACDQ/ACQO.
581
OHMUL, // high mul: AMUL/AIMUL for unsigned/signed (OMUL uses AIMUL for both).
582
OLROT, // left rotate: AROL.
583
ORROTC, // right rotate-carry: ARCR.