The SAMD chips use a pretty significantly different phillosophy when it comes to IO Ports.
The AVR has DDRB, PINB, and PORTB registers for control, input, and output to a set of 8pins (and similar for PORTC and PORTD.)
SAMD has 128bytes of registers for each (up to) 32bits of pins, in a nice regular array,
These registers start at an address defined in the CMSIS files (.../tools/CMSIS-Atmel/1.2.0/CMSIS/Device/ATMEL/samd21/include/ ) as an array named PORT. Each element of the PORT array is a PortGroup structure (which seems backwards to me. Sigh.)
So the "A" pin registers are referenced as PORT->Group[0].individualRegister
and the "B" pin registers are "A" pin registers are PORT->Group[1].individualRegister
The arduino code "helpfully" defines PORTA and PORTB as 0 and 1, which means you can say stuff like:
PORT->Group[PORTA].OUTSET.reg = 1<<pinnumber ;
Note the lovely combination of pointers, arrays, and structure references.
(however, most of the calculations that it looks like would be required will happen at compile time, so it's not quite as bad as it seems.)
The individual register names are described in the datasheet (section 22.7 in my copy), and reflected by definitions you can find in .../tools/CMSIS-Atmel/1.2.0/CMSIS/Device/ATMEL/samd21/include/component/port.h
There are also names defined for every individual register in .../tools/CMSIS-Atmel/1.2.0/CMSIS/Device/ATMEL/samd21/include/instance/port.h, so you could have coded the above line as
REG_PORT_OUTSET0 = 1<<pinnumber ;
There are various reasons why access via the structure is preferred, though.
The SAMD doesn't have any special instructions for accessing IO bits, so bit-banging never gets as efficient as the single instructions that can happen on an AVR (usually, setting a bit requires 3 instructions, two registers, and an additional 32bit constant in flash.) It does allow single-bit modifications by having separate SET/CLEAR/TOGGLE registers for each port.
See also This message thread at AdaFruit