Knowledge

Berkeley RISC

Source đź“ť

191:, allowing small constants to be folded directly into the instruction instead of having to be loaded separately. Additionally, the results of one operation are often used soon after by another, so by skipping the write to memory and storing the result in a register, the program did not end up much larger, and could in theory run much faster. For instance, a string of instructions carrying out a series of mathematical operations might require only a few loads from memory, while the majority of the numbers being used would be either constants in the instructions, or intermediate values left in the registers from prior calculations. In a sense, in this technique some registers are used to 242:
levels deep before the register windowing mechanism reaches its limit; once the last window is reached, no new window can be set up for another nested call. And if procedures are only nested a few levels deep, registers in the windows above the deepest call nesting level can never be accessed at all, so these are completely wasted. It was Stanford's work on compilers that led them to ignore the register window concept, believing that an efficient compiler could make better use of the registers than a fixed system in hardware. (The same reasoning would apply for a smart assembly language programmer.)
281:(ISCA) in 1981. It had 44,500 transistors implementing 31 instructions and a register file containing 78 32-bit registers. This allowed for six register windows containing 14 registers. Of those 14 registers, 4 were overlapped from the prior window. The total is then: 10*6 registers in windows + 18 globals=78 registers total. The control and instruction decode section occupied only 6% of the die, whereas the typical design of the era used about 50% for the same role. The register file took up most of that space. 359: 251: 309:
ran on June 11. In testing, the chips proved to have lesser performance than expected. In general, an instruction would take 2 ÎĽs to complete, while the original design allotted for about .4 ÎĽs (five times as fast). The precise reasons for this problem were never fully explained. However, throughout testing it was clear that certain instructions did run at the expected speed, suggesting the problem was physical, not logical.
163:, which might take several cycles to access. By providing more registers, and making sure the compilers actually used them, programs should run much faster. Additionally, the speed of the processor would be more closely defined by its clock speed, because less of its time would be spent waiting for memory accesses. Transistor for transistor, a RISC design would outperform a conventional CPU. 262:. Work on the design started in 1980 as part of a VLSI design course, but the then-complicated design crashed almost all existing design tools. The team had to spend considerable amounts of time improving or re-writing the tools, and even with these new tools it took just under an hour to extract the design on a 378:
The savings due to the new design were tremendous. Whereas Gold contained a total of 78 registers in 6 windows, Blue contained 138 registers broken into 8 windows of 16 registers each, with another 10 globals. This expansion of the register file increases the chance that a given procedure can fit all
374:
The key difference was simpler cache circuitry that eliminated one line per bit (from three to two), dramatically shrinking the register file size. The change also required much tighter bus timing, but this was a small price to pay and in order to meet the needs several other parts of the design were
370:
design. Work on Blue progressed slower than Gold, due both to the lack of a pressing need now that Gold was going to fab, and to changeovers in the classes and students staffing the effort. This pace also allowed them to add in several new features that would end up improving the design considerably.
347:
UC Berkeley students designed and built the first VLSI reduced instruction set computer in 1981. The simplified instructions of RISC-I reduced the hardware for instruction decode and control, which enabled a flat 32-bit address space, a large set of registers, and pipelined execution. A good match to
229:
for each procedure which contains the address from which the procedure was called, the data (parameters) that were passed in, and space for any result values that need to be returned. In the vast majority of cases these frames are small, typically with three or fewer inputs and one or no outputs (and
233:
In this case, the call into and return from a procedure is simple and extremely fast. A single instruction is called to set up a new block of registers—a new register window—and then, with operands passed into the procedure in the "low end" of the new window, the program jumps into the procedure. On
520:
and other modern techniques which are applicable regardless of instruction architecture. The amount of silicon dedicated to instruction decoding on a modern x86 implementation is proportionately quite small, so the distinction between "complex" and RISC processor implementations has become blurred.
308:
service for production on June 22, 1981, using a 2 ÎĽm (2,000 nm) process. A variety of delays forced them to abandon their masks four separate times, and wafers with working examples did not arrive back at Berkeley until May 1982. The first working RISC I "computer" (actually a checkout board)
498:
Sun Microsystems introduced the Scalable Processor Architecture (SPARC) RISC in 1987. Building on UC Berkeley RISC and Sun compiler and operating system developments, SPARC architecture was highly adaptable to evolving semiconductor, software, and system technology and user needs. The architecture
334:
It is important to put this performance in context. Even though the RISC design had run slower than the VAX, it made no difference to the importance of the design. RISC allowed for the production of a true 32-bit processor on a real chip die using what was already an older fab. Traditional designs
241:
On the downside, this approach means that procedures with large numbers of local variables are problematic, and ones with fewer lead to registers—an expensive resource—being wasted. There are a finite number of register windows in the design, e.g., eight, so procedures can only be nested that many
151:
If, as these other papers suggested, the majority of these opcodes would never be used in practice, then this significant resource was being wasted. If one were to simply build the same processor with the unused instructions removed it would be smaller and thus less expensive, while if one instead
198:
To the casual observer, it was not clear that the RISC concept would improve performance, and it might even make it worse. The only way to be sure was to simulate it. The results of such simulations were clear; in test after test, every simulation showed an enormous overall benefit in performance
186:
would actually require four instructions (two loads, an add, and a save), the machine would have to do much more memory access to read the extra instructions, potentially slowing it down considerably. This was offset to some degree by the fact that the new designs used what was then a very large
99:
used only a small subset of all the instructions available. Both of these studies suggested that one could produce a much simpler CPU that would still run most real-world code. Another finding, not fully explored at the time, was Tanenbaum's note that 81% of the constants were either 0, 1, or 2.
170:
instruction of a traditional design would generally come in several flavours, one that added the numbers in two registers and placed it in a third, another that added numbers found in main memory and put the result in a register, etc. The RISC designs, on the other hand, included only a single
330:
of CISC designs was not actually all that impressive in reality. In terms of overall performance, the RISC I was twice as fast as the VAX, and about four times that of the Z8000. The programs ended up performing about the same overall number of memory accesses because the large register file
152:
used those transistors to improve performance instead of decoding instructions that would not be used, a faster processor was possible. The RISC concept was to take advantage of both of these, producing a CPU that was the same level of complexity as the 68000, but much faster.
401:
RISC II proved to be much more successful in silicon and in testing outperformed almost all minicomputers on almost all tasks. For instance, performance ranged from 85% of VAX speed to 256% on a variety of loads. RISC II was also benched against the famous
398:(ALU), meaning that no changes were needed in the core logic. This simple technique yielded a surprising 30% improvement in code density, making an otherwise identical program on Blue run faster than on Gold due to the decreased number of memory accesses. 230:
sometimes an input is reused as an output). In the Berkeley design, then, a register window was a set of several registers, enough of them that the entire procedure stack frame would most likely fit entirely within the register window.
107:
market was moving from 8 to 16-bit with 32-bit designs about to appear. Those designs were premised on the goal of replicating some of the more well-respected existing ISAs from the mainframe and minicomputer world. For instance, the
288:
for additional speed, but without the complex instruction re-ordering of more modern designs. This makes conditional branches a problem, because the compiler has to fill the instruction following a conditional branch (the so-called
234:
return, the results are placed in the window at the same end, and the procedure exits. The register windows are set up to overlap at the ends, so that the results from the call simply "appear" in the window of the caller,
394:, to be stored in memory in a smaller 16-bit format, and for two such instructions to be packed into a single machine word. The instructions would be invisibly expanded back to 32-bit versions before they reached the 56:
Berkeley's project was so successful that it became the name for all similar designs to follow; even the MIPS would become known as a "RISC processor". The Berkeley RISC design was later commercialized by
504:
Techniques developed for and alongside the idea of the reduced instruction set have also been adopted in successively more powerful implementations and extensions of the traditional "complex"
83:
Both RISC and MIPS were developed from the realization that the vast majority of programs used only a small minority of a processor's available instruction set. In a famous 1978 paper,
379:
of its local storage in registers, and increase the nesting depth. Nevertheless, the larger register file required fewer transistors, and the final Blue design, fabbed as
312:
Had the design worked at full speed, performance would have been excellent. Simulations using a variety of small programs compared the 4 MHz RISC I to the 5 MHz
179:
use registers for all operands. This forced the programmer to write additional instructions to load the values from memory, if needed, making a RISC program "less dense".
210:, in which the entire "register file" was broken down into blocks, allowing the compiler to "see" one block for global variables, and another for local variables. 195:
memory locations, so that the registers are used as proxies for the memory locations until their final values after a group of instructions have been determined.
390:, which invisibly "up-converted" 16-bit instructions into a 32-bit format. This allowed smaller instructions, typically things with one or no operands, like 348:
C programs and the Unix operating system, RISC-I influenced instruction sets widely used today, including those for game consoles, smartphones and tablets.
202:
Where the two projects, RISC and MIPS, differed was in the handling of the registers. MIPS simply added lots of registers and left it to the compilers (or
295:), with something selected to be "safe" (i.e., not dependent on the outcome of the conditional). Sometimes the only suitable instruction in this case is 278: 326:
showed this clearly. Program size was about 30% larger than the VAX but very close to that of the Z8000, validating the argument that the higher
254:
RISC I die shot. Most of the chip is occupied by the register file (bottom left area). Control logic only occupies the small top right corner.
729: 882: 826: 1148: 182:
In the era of expensive memory this was a real concern, notably because memory was also much slower than the CPU. Since a RISC design's
206:
programmers) to make use of them. RISC, on the other hand, added circuitry to the CPU to assist the compiler. RISC used the concept of
499:
delivered the highest performance, scalable workstations and servers, for engineering, business, Internet, and cloud computing uses.
339:
required newer fabs before becoming practical. Using the same fabs, RISC I could have largely outperformed the competition.
810: 38: 414:
Work on the original RISC designs ended with RISC II, but the concept lived on at Berkeley. The basic core was re-used in
342:
On February 12, 2015, IEEE installed a plaque at UC Berkeley to commemorate the contribution of RISC-I. The plaque reads:
274: 166:
On the downside, the instructions being removed were generally performing several "sub-instructions". For instance, the
42: 843: 335:
simply could not do this; with so much of the chip surface dedicated to decoder logic, a true 32-bit design like the
1153: 891: 875: 78: 23: 1158: 453:. It was the SPARC that first clearly demonstrated the power of the RISC concept; when they shipped in the first 128:
to decode the user-visible instruction into a series of internal operations. This microcode represented perhaps
577: 109: 159:, small bits of memory holding temporary values that can be accessed very rapidly. This contrasts with normal 88: 868: 757: 860: 669:(Technical report). Berkeley, CA, US: University of California at Berkeley. pp. 13, 59. CSD-83-135. 594: 406:, then considered to be the best commercial chip implementation, and outperformed it by 140% to 420%. 238:. Thus the common procedure call does not have to interact with main memory, greatly accelerating it. 781: 423: 87:
demonstrated that a complex 10,000 line high-level program could be represented using a simplified
704: 945: 814: 661: 833: 761: 301:. A notable number of later RISC-style designs still require the consideration of branch delay. 1119: 776: 569: 493:. On February 13, 2015, IEEE installed a plaque at Oracle Corporation in Santa Clara. It reads 474: 395: 1066: 950: 509: 285: 218: 8: 984: 84: 46: 366:
While the RISC I design ran into delays, work at Berkeley had already turned to the new
1010: 794: 680: 642: 562: 156: 508:. Much of a modern microprocessor's transistor count is devoted to large caches, many 969: 849: 839: 573: 482: 291: 203: 798: 91:
using an 8-bit fixed-length opcode. This was roughly the same conclusion reached at
1095: 786: 646: 632: 517: 505: 470: 450: 124:
was similar in general layout. To provide this rich set of instructions, CPUs used
66: 58: 620: 940: 806: 445:
RISC is less famous, but more influential, for being the basis of the commercial
304:
After a month of validation and debugging, the design was sent to the innovative
207: 117: 1105: 1076: 932: 478: 403: 336: 214: 121: 104: 27: 1142: 964: 916: 853: 50: 45:
between 1980 and 1984. The other project took place a short distance away at
461:
vendor hurrying for a RISC design of their own, leading to designs like the
383:, implemented all of the RISC instruction set with only 40,760 transistors. 1053: 960: 327: 34: 790: 637: 1071: 1048: 890: 513: 477:. By 1986, most large chip vendors followed, working on efforts like the 439: 323: 160: 358: 112:
started out as an effort to produce a single-chip implementation of the
1090: 1086: 1023: 331:
dramatically improved the odds the needed operand was already on-chip.
297: 263: 250: 457:
they outperformed anything on the market. This led to virtually every
1081: 1043: 1027: 979: 535: 486: 462: 419: 258:
The first attempt to implement the RISC concept was originally named
125: 1109: 730:"Oracle to Receive IEEE Milestone Award for SPARC RISC Architecture" 1127: 974: 955: 935: 1123: 1114: 1015: 906: 621:"Implications of Structured Programming for Machine Architecture" 490: 466: 96: 95:, whose studies of their own code running on mainframes like the 1100: 1020: 1000: 991: 530: 431: 320: 313: 188: 113: 438:, which was a full set of chips needed to build a full 32-bit 213:
The idea was to make one particularly common instruction, the
1061: 1058: 1005: 454: 446: 305: 62: 31: 995: 987: 458: 116:, which had a rich instruction set with a wide variety of 564:
Milestones in Computer Science and Information Technology
316: 92: 16:
Research project into RISC-based microprocessor design
762:"The Case for the Reduced Instruction Set Computer" 422:(in the same way that it could be claimed RISC ran 835:Reduced instruction set computer—RISC—Architecture 561: 155:To do this, RISC concentrated on adding many more 1140: 279:International Symposium on Computer Architecture 53:effort starting in 1981 and running until 1984. 805: 756: 614: 612: 876: 22:is one of two seminal research projects into 103:These realizations were taking place as the 609: 418:in 1984, basically a RISC converted to run 171:flavour of any particular instruction, the 883: 869: 838:. Research Studies Press. pp. 19–48. 217:, extremely easy to implement. Almost all 148:of the transistors of the overall design. 780: 636: 618: 434:instead of Smalltalk. Another effort was 386:The other major change was to include an 32:Defense Advanced Research Projects Agency 357: 249: 592: 553: 1141: 769:ACM SIGARCH Computer Architecture News 681:"memorabilia [RISC-I Reunion]" 653: 559: 864: 831: 816:Design and Implementation of RISC I' 659: 822:(Technical report). UCB-CSD-82-106. 275:Association for Computing Machinery 72: 13: 1149:University of California, Berkeley 43:University of California, Berkeley 41:(who coined the term RISC) at the 14: 1170: 595:"Understanding ARM Architectures" 284:RISC I also featured a two-stage 892:Reduced instruction set computer 619:Tanenbaum, Andrew (March 1978). 236:with no data having to be copied 79:Reduced instruction set computer 24:reduced instruction set computer 750: 727: 65:architecture, and inspired the 721: 705:"Berkeley Hardware Prototypes" 697: 673: 586: 110:National Semiconductor NS32000 30:design taking place under the 1: 660:Peek, James B. (1983-06-02). 593:Chisnal, David (2010-08-23). 541: 409: 663:The VLSI Circuitry of RISC I 546: 426:), and later in the similar 89:instruction set architecture 7: 524: 388:instruction-format expander 10: 1175: 353: 76: 1036: 925: 899: 625:Communications of the ACM 560:Reilly, Edwin D. (2003). 245: 221:use a system known as an 760:; Ditzel, David (1980). 709:people.eecs.berkeley.edu 269:The final design, named 1154:Central processing unit 1159:Instruction processing 832:Tabak, Daniel (1987). 516:instruction dispatch, 449:processor design from 363: 255: 175:, for instance, would 791:10.1145/641914.641917 638:10.1145/359361.359454 475:MIPS Computer Systems 396:arithmetic logic unit 361: 253: 219:programming languages 894:(RISC) architectures 286:instruction pipeline 187:instruction word of 319:and the 5 MHz 273:, was published in 85:Andrew S. Tanenbaum 47:Stanford University 364: 256: 199:from this design. 37:. RISC was led by 1136: 1135: 685:risc.berkeley.edu 518:branch prediction 483:Fairchild Clipper 375:sped up as well. 292:branch delay slot 223:activation record 204:assembly language 1166: 885: 878: 871: 862: 861: 857: 827:Berkeley RISC II 823: 821: 813:(October 1982). 802: 784: 766: 758:Patterson, David 744: 743: 741: 740: 734:blogs.oracle.com 725: 719: 718: 716: 715: 701: 695: 694: 692: 691: 677: 671: 670: 668: 657: 651: 650: 640: 616: 607: 606: 604: 602: 590: 584: 583: 567: 557: 506:x86 architecture 473:(SGI) purchased 471:Silicon Graphics 451:Sun Microsystems 393: 362:RISC II die shot 300: 208:register windows 185: 174: 169: 147: 146: 142: 137: 136: 132: 118:addressing modes 73:The RISC concept 67:ARM architecture 59:Sun Microsystems 1174: 1173: 1169: 1168: 1167: 1165: 1164: 1163: 1139: 1138: 1137: 1132: 1032: 921: 895: 889: 846: 819: 811:Patterson, D.A. 764: 753: 748: 747: 738: 736: 726: 722: 713: 711: 703: 702: 698: 689: 687: 679: 678: 674: 666: 658: 654: 617: 610: 600: 598: 591: 587: 580: 558: 554: 549: 544: 527: 412: 391: 356: 296: 248: 183: 172: 167: 144: 140: 139: 134: 130: 129: 81: 75: 39:David Patterson 17: 12: 11: 5: 1172: 1162: 1161: 1156: 1151: 1134: 1133: 1131: 1130: 1117: 1112: 1106:Motorola 88000 1103: 1098: 1093: 1084: 1079: 1074: 1069: 1064: 1056: 1051: 1046: 1040: 1038: 1034: 1033: 1031: 1030: 1018: 1013: 1008: 1003: 998: 982: 977: 972: 967: 958: 953: 948: 943: 938: 933:Analog Devices 929: 927: 923: 922: 920: 919: 914: 909: 903: 901: 897: 896: 888: 887: 880: 873: 865: 859: 858: 844: 829: 824: 803: 782:10.1.1.68.9623 752: 749: 746: 745: 720: 696: 672: 652: 631:(3): 237–246. 608: 585: 578: 551: 550: 548: 545: 543: 540: 539: 538: 533: 526: 523: 502: 501: 479:Motorola 88000 411: 408: 404:Motorola 68000 355: 352: 351: 350: 337:Motorola 68020 247: 244: 215:procedure call 122:Motorola 68000 105:microprocessor 77:Main article: 74: 71: 28:microprocessor 15: 9: 6: 4: 3: 2: 1171: 1160: 1157: 1155: 1152: 1150: 1147: 1146: 1144: 1129: 1125: 1121: 1118: 1116: 1113: 1111: 1107: 1104: 1102: 1099: 1097: 1094: 1092: 1088: 1085: 1083: 1080: 1078: 1075: 1073: 1070: 1068: 1065: 1063: 1060: 1057: 1055: 1052: 1050: 1047: 1045: 1042: 1041: 1039: 1035: 1029: 1025: 1022: 1019: 1017: 1014: 1012: 1009: 1007: 1004: 1002: 999: 997: 993: 989: 986: 983: 981: 978: 976: 973: 971: 968: 966: 965:LatticeMico32 962: 959: 957: 954: 952: 949: 947: 944: 942: 939: 937: 934: 931: 930: 928: 924: 918: 917:Stanford MIPS 915: 913: 912:Berkeley RISC 910: 908: 905: 904: 902: 898: 893: 886: 881: 879: 874: 872: 867: 866: 863: 855: 851: 847: 845:9780863800474 841: 837: 836: 830: 828: 825: 818: 817: 812: 808: 804: 800: 796: 792: 788: 783: 778: 774: 770: 763: 759: 755: 754: 735: 731: 728:Gee, Kelvin. 724: 710: 706: 700: 686: 682: 676: 665: 664: 656: 648: 644: 639: 634: 630: 626: 622: 615: 613: 596: 589: 581: 575: 571: 566: 565: 556: 552: 537: 534: 532: 529: 528: 522: 519: 515: 511: 507: 500: 496: 495: 494: 492: 488: 484: 480: 476: 472: 468: 464: 460: 456: 452: 448: 443: 441: 437: 433: 429: 425: 421: 417: 407: 405: 399: 397: 389: 384: 382: 376: 372: 369: 360: 349: 345: 344: 343: 340: 338: 332: 329: 325: 322: 318: 315: 310: 307: 302: 299: 294: 293: 287: 282: 280: 276: 272: 267: 265: 261: 252: 243: 239: 237: 231: 228: 224: 220: 216: 211: 209: 205: 200: 196: 194: 190: 180: 178: 164: 162: 158: 153: 149: 127: 123: 119: 115: 111: 106: 101: 98: 94: 90: 86: 80: 70: 68: 64: 60: 54: 52: 48: 44: 40: 36: 33: 29: 26:(RISC) based 25: 21: 20:Berkeley RISC 1054:Apollo PRISM 1037:Discontinued 961:LatticeMico8 911: 834: 815: 807:Sequin, C.H. 775:(6): 25–33. 772: 768: 751:Bibliography 737:. Retrieved 733: 723: 712:. Retrieved 708: 699: 688:. Retrieved 684: 675: 662: 655: 628: 624: 599:. Retrieved 588: 563: 555: 503: 497: 444: 435: 427: 415: 413: 400: 387: 385: 380: 377: 373: 367: 365: 346: 341: 333: 328:code density 311: 303: 290: 283: 270: 268: 259: 257: 240: 235: 232: 226: 222: 212: 201: 197: 192: 181: 176: 165: 154: 150: 102: 82: 55: 49:under their 35:VLSI Project 19: 18: 1049:AMD Am29000 514:superscalar 440:workstation 324:Zilog Z8000 227:stack frame 161:main memory 1143:Categories 1087:Intel i860 1024:MicroBlaze 739:2020-03-19 714:2021-11-06 690:2020-03-19 601:13 October 597:. Informit 579:1573565210 568:. p.  542:References 410:Follow-ons 317:VAX 11/780 264:VAX-11/780 1082:DEC PRISM 1028:PicoBlaze 980:Power ISA 854:801855772 777:CiteSeerX 547:Citations 536:Power ISA 487:AMD 29000 463:DEC Alpha 430:that ran 420:Smalltalk 157:registers 126:microcode 975:OpenRISC 956:eSi-RISC 936:Blackfin 799:12034303 525:See also 512:stages, 510:pipeline 489:and the 469:, while 428:VLSI-BAM 1124:PowerPC 1115:PA-RISC 1067:Clipper 1016:Unicore 985:Renesas 907:IBM 801 900:Origins 647:3261560 491:PowerPC 467:PA-RISC 381:RISC II 354:RISC II 189:32-bits 143:⁄ 133:⁄ 97:IBM 360 61:as the 1110:M·CORE 1101:MIPS-X 1021:Xilinx 1011:Sunway 1001:RISC-V 992:SuperH 926:Active 852:  842:  797:  779:  645:  576:  531:RISC-V 455:Sun-4s 432:Prolog 321:16-bit 314:32-bit 277:(ACM) 271:RISC I 246:RISC I 193:shadow 177:always 120:. The 114:VAX-11 1120:POWER 1077:CRISP 1062:AVR32 1059:Atmel 1044:Alpha 1006:SPARC 820:(PDF) 795:S2CID 765:(PDF) 667:(PDF) 643:S2CID 447:SPARC 306:MOSIS 63:SPARC 1128:ROMP 1096:META 1091:i960 1072:CR16 996:V850 988:M32R 970:MIPS 850:OCLC 840:ISBN 603:2015 574:ISBN 465:and 459:Unix 436:SPUR 416:SOAR 368:Blue 260:Gold 51:MIPS 951:AVR 946:ARM 941:ARC 787:doi 633:doi 392:NOP 298:NOP 225:or 184:ADD 173:ADD 168:ADD 138:to 93:IBM 1145:: 1126:, 1122:, 1108:, 1089:, 1026:, 994:, 990:, 963:, 848:. 809:; 793:. 785:. 771:. 767:. 732:. 707:. 683:. 641:. 629:21 627:. 623:. 611:^ 572:. 570:50 485:, 481:, 442:. 266:. 69:. 884:e 877:t 870:v 856:. 801:. 789:: 773:8 742:. 717:. 693:. 649:. 635:: 605:. 582:. 424:C 145:3 141:1 135:4 131:1

Index

reduced instruction set computer
microprocessor
Defense Advanced Research Projects Agency
VLSI Project
David Patterson
University of California, Berkeley
Stanford University
MIPS
Sun Microsystems
SPARC
ARM architecture
Reduced instruction set computer
Andrew S. Tanenbaum
instruction set architecture
IBM
IBM 360
microprocessor
National Semiconductor NS32000
VAX-11
addressing modes
Motorola 68000
microcode
registers
main memory
32-bits
assembly language
register windows
procedure call
programming languages

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.

↑