11Title : P4~16~ Language Specification
2- Title Note: version 1.2.2
2+ Title Note: version 1.2.3
33Title Footer: &date;
44Author: The P4 Language Consortium
55Heading depth: 5
@@ -40,6 +40,9 @@ pre, code {
4040 font-family: LuxiMono;
4141 font-size: 75%;
4242}
43+ table {
44+ breakable: true;
45+ }
4346}
4447
4548Colorizer: p4
@@ -1994,7 +1997,7 @@ compile-time known value (see Section [#sec-ct-constants]) that is a
19941997non-negative integer. When using an expression for
19951998the size, the expression must be parenthesized. Bitstrings with width 0 are
19961999allowed; they have no actual bits, and can only have the value 0. See
1997- { #sec-uninitialized-values-and-writing-invalid-headers } for additional details.
2000+ [ #sec-uninitialized-values-and-writing-invalid-headers] for additional details.
19982001
19992002~ Begin P4Example
20002003const bit<32> x = 10; // 32-bit constant with value 10.
@@ -7600,7 +7603,7 @@ names.
76007603Evaluation may create multiple instances from one type, each of which
76017604must have a unique, fully-qualified name.
76027605
7603- ### Computing control names
7606+ ### Computing control-plane names
76047607
76057608The fully-qualified name of a construct is derived by concatenating
76067609the fully-qualified name of its enclosing construct with its local
@@ -7609,7 +7612,7 @@ the global scope, have the same local and fully-qualified names. The
76097612local names of controllable entities and enclosing constructs are
76107613derived from the syntax of a P4 program as follows.
76117614
7612- #### Value sets { #sec-cp-tables }
7615+ #### Value sets { #sec-cp-value-set }
76137616For each `value_set` construct, its syntactic name becomes the local
76147617name of the value set. For example:
76157618
@@ -8325,47 +8328,26 @@ The P4 compiler should provide:
83258328
83268329# Appendix: Revision History { #sec-revision-history; @h1:"A" }
83278330
8328- |:---{width:12%}---|:---{width:20%}---|:---{width:68%}---|
8329- | **Release** | **Release Date** | **Summary of Changes** |
8330- |-----|-----|-----|
8331- | 1.0.0 | May 17, 2017 | Initial version. |
8332- |-----|-----|-----|
8333- | 1.1.0 | November 26, 2018 | Added top-level functions, optional and named parameters, |
8334- | | | `enum` representations, parser value sets, type definitions, |
8335- | | | saturating arithmetic, and structured annotations. |
8336- | | | Removed `globalname` annotation and added a table `size` property. |
8337- | | | Clarified semantics of operations on invalid headers, added |
8338- | | | restrictions on arguments to calls, and modified precedence of |
8339- | | | bitwise operators. |
8340- |-----|-----|-----|
8341- | 1.2.0 | October 14, 2019 | Added error `ParserInvalidArgument`, order of `const` entries, |
8342- | | | header size methods, 1-bit signed values, signed bit slices, empty |
8343- | | | tuples, `@deprecated` annotation, free-form annotations, `int` type |
8344- | | | `table.apply().miss`, `string` type. |
8345- |-----|-----|-----|
8346- | 1.2.1 | June 11, 2020 | Added structure-value expressions, default values, concatenation, |
8347- | | | structured annotations; standardized several new annotations; |
8348- | | | generalized typing rule for masks; restricted typing rule for |
8349- | | | shifts with infinite-precision operands; clarified evaluation |
8350- | | | order for table keys; clarified copy-out behavior; clarified |
8351- | | | semantics of invalid header stacks; clarified initialization |
8352- | | | semantics; fixed several small issues in grammar. |
8353- |-----|-----|-----|
8354- | 1.2.2 | May 17, 2021 | Added support for tuple access, generic structures, additional |
8355- | | | enumeration types, abstract methods, conditional and empty |
8356- | | | statements in parsers, additional casts, and 0-width types; |
8357- | | | clarified semantics of default actions, headers, empty types, and |
8358- | | | action data; fixed typos and inconsistencies in the grammar. |
8359- |-----|-----|-----|
8360-
8361- ## Summary of changes made in version 1.2.3
8362-
8363- * Allow empty entries lists for tables
8364- * Extended minSizeInBits, and minSizeInBytes to apply to more
8365- expressions (Section [#sec-minsizeinbits]). Added maxSizeInBits and maxSizeInBytes.
8366- * Specify operations on values typed as type variables.
8367-
8368- ## Summary of changes made in version 1.2.2
8331+ ## Summary of changes made in version 1.2.3, released July 11, 2022.
8332+
8333+ * Extended `minSizeInBits` and `minSizeInBytes` to apply to more expressions (Section [#sec-minsizeinbits]).
8334+ * Added support for `maxSizeInBits` and `maxSizeInBytes` (Section [#sec-minsizeinbits]).
8335+ * Added support for empty lists of const entries in tables (Section [#sec-entries]).
8336+ * Added support for `switch` statements in actions (Section [#sec-actions]).
8337+ * Added support for direct invocation of controls and parsers (Section [#sec-parameterization]).
8338+ * Added parser `value_set` to list of control-plane visible names (Section [#sec-cp-names]).
8339+ * Added `match_kind` as a base type (Section [#sec-match-kind-type]).
8340+ * Removed structure initializers as they are subsumed by structure-valued expressions (Section [#sec-structure-expressions]).
8341+ * Specified operations on values typed as type variables (Section [#sec-type-variable-operations]).
8342+ * Clarified semantics of compile-time known values (Section [#sec-ct-constants]).
8343+ * Clarified semantics of directionless parameters (Section [#sec-calling-convention]).
8344+ * Clarified semantics of infinite precision integers (Section [#sec-infinite-precision-integers]).
8345+ * Clarified semantics of bit slices, shifts, and concatenation (Section [#sec-bit-ops]).
8346+ * Clarified semantics of optional parameters (Section [#sec-optional-parameters]).
8347+ * Clarified restrictions on extern method and function invocation (Section [#sec-calling-restrictions]).
8348+ * Clarified semantics of implicit casts (Section [#sec-implicit-casts]).
8349+
8350+ ## Summary of changes made in version 1.2.2, released May 17, 2021
83698351
83708352* Added support for accessing tuple fields (Section [#sec-tuple-exprs]).
83718353* Added support for generic structures (Section [#sec-type-spec]).
@@ -8383,7 +8365,7 @@ The P4 compiler should provide:
83838365* Fixed several typos and inconsistencies in grammar (Section [#sec-grammar]).
83848366* Eliminated annotations on `const` entries in grammar (Section [#sec-grammar]).
83858367
8386- ## Summary of changes made in version 1.2.1
8368+ ## Summary of changes made in version 1.2.1, released June 11, 2020
83878369
83888370* Added structure-value expressions (Section
83898371 [#sec-structure-expressions]).
@@ -8413,7 +8395,7 @@ The P4 compiler should provide:
84138395 allow empty statements in parser (Section [#sec-parser-state-stmt]),
84148396 and eliminate annotations on const entries (Section [#sec-entries]).
84158397
8416- ## Summary of changes made in version 1.2.0
8398+ ## Summary of changes made in version 1.2.0, released October 14, 2019
84178399
84188400* Added `table.apply().miss` (Section [#sec-invoke-mau]).
84198401* Added `string` type (Section [#sec-string-type]).
@@ -8430,7 +8412,7 @@ The P4 compiler should provide:
84308412* Clarified the significance of order of entries in `const entries` (Section [#sec-entries]).
84318413* Added methods to calculate header size (Section [#sec-ops-on-hdrs]).
84328414
8433- ## Summary of changes made in version 1.1.0
8415+ ## Summary of changes made in version 1.1.0, released November 26, 2017.
84348416
84358417* Top-level functions (Section [#sec-functions])
84368418 - Functions may be declared at the top-level of a P4 program.
@@ -8459,6 +8441,8 @@ The P4 compiler should provide:
84598441* Computed bitwidths (Section [#sec-base-types])
84608442 - Added support for specifying widths using expressions in `bit` and `varbit` types.
84618443
8444+ ## Initial version 1.0.0, released May 17, 2017
8445+
84628446# Appendix: P4 reserved keywords { #sec-p4-keywords }
84638447
84648448The following table shows all P4 reserved keywords. Some identifiers
0 commit comments